我喜欢Python列表理解语法.
它也可以用来创建字典吗?例如,通过迭代成对的键和值:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
Run Code Online (Sandbox Code Playgroud) python dictionary list-comprehension dictionary-comprehension
我有a = [1,2,3,4],我想要d = {1:0, 2:0, 3:0, 4:0}
d = dict(zip(q,[0 for x in range(0,len(q))]))
Run Code Online (Sandbox Code Playgroud)
工作,但很难看.什么是更干净的方式?
我尝试以编程方式创建列表字典是不允许我单独地解决字典键.每当我创建列表字典并尝试附加到一个键时,所有这些都会更新.这是一个非常简单的测试用例:
data = {}
data = data.fromkeys(range(2),[])
data[1].append('hello')
print data
Run Code Online (Sandbox Code Playgroud)
实际结果: {0: ['hello'], 1: ['hello']}
预期结果: {0: [], 1: ['hello']}
这是有效的
data = {0:[],1:[]}
data[1].append('hello')
print data
Run Code Online (Sandbox Code Playgroud)
实际和预期结果: {0: [], 1: ['hello']}
为什么fromkeys方法不能按预期工作?
我有以下代码:
[x ** 2 for x in range(10)]
Run Code Online (Sandbox Code Playgroud)
当我在Python Shell中运行它时,它返回:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Run Code Online (Sandbox Code Playgroud)
我搜索过,似乎这被称为列表理解,但它是如何工作的?
我看过这个链接
但是我如何初始化字典呢?
说两个清单
keys = ['a','b','c','d']
values = [1,2,3,4]
dict = {}
Run Code Online (Sandbox Code Playgroud)
我想dict用keys&初始化values
我有一些看起来像这样的代码:
d = {'foo': True, 'bar': 42, 'baz': '!'}
a = {'foo': d['foo'], 'bar': d['bar']}
b = {'foo': d['foo'], 'baz': d['baz']}
c = {'bar': d['bar'], 'baz': d['baz']}
Run Code Online (Sandbox Code Playgroud)
当然有更好的方式来表达这一点.我实际上阅读了文档,希望字典的copy方法接受键包含在新字典中:
# I'd hoped that something like this would work...
a = d.copy('foo', 'bar')
b = d.copy('foo', 'baz')
c = d.copy('bar', 'baz')
Run Code Online (Sandbox Code Playgroud)
我可以为此目的编写一个函数:
copydict = lambda dct, *keys: {key: dct[key] for key in keys}
a = copydict(d, 'foo', 'bar')
b = copydict(d, 'foo', 'baz')
c = copydict(d, 'bar', 'baz')
Run Code Online (Sandbox Code Playgroud)
有没有比上面更好的解决方案?
我有一个空列表字典,其中包含在开头声明的所有键:
>>> keys = ["k1", "k2", "k3"]
>>> d = dict.fromkeys(keys, [])
>>> d
{'k2': [], 'k3': [], 'k1': []}
Run Code Online (Sandbox Code Playgroud)
当我尝试将一个坐标对(列表["x1", "y1"])添加到其中一个键列表时,它会添加到所有键列表中:
>>> d["k1"].append(["x1", "y1"])
>>> d
{'k1': [['x1', 'y1']], 'k2': [['x1', 'y1']], 'k3': [['x1', 'y1']]}
Run Code Online (Sandbox Code Playgroud)
我在寻找的是:
>>> d
{'k1': [['x1', 'y1']], 'k3': [], 'k1': []}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python 3中实现这一点?
我有:
somelist = ['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
我希望这样,列表将转换为字典
somedict = {'a' : 1, 'b' : 1, 'c' : 1, 'd' : 1}
Run Code Online (Sandbox Code Playgroud)
所以我做了:
somedict = dict(zip(somelist, [1 for i in somelist]))
Run Code Online (Sandbox Code Playgroud)
它确实有效,但不确定它是否是最有效或最快速的方式
还有其他方法吗,最好是最简单的方法吗?
对于writerow的csv.DictWriter,我需要填写字典(的一部分)是空的.我发现没有立即解决方案.有吗?
喜欢
fieldnames = ['first','last']
Run Code Online (Sandbox Code Playgroud)
伪代码
row = fieldnames.fill(None)
Run Code Online (Sandbox Code Playgroud)
结果
print(row)
['first':None,'last':None]
Run Code Online (Sandbox Code Playgroud)
以便
destination.writerow(row)
Run Code Online (Sandbox Code Playgroud)
结果是
,
Run Code Online (Sandbox Code Playgroud) 我想在name_input为空时追加一个空列表作为值,并且对于字典为grade_input为空,其字符为name_input.以下是代码段.但它似乎没有用.有什么建议?
if (name_input != '' and grade_input ==''):
name_dic[name_input].append([])
Run Code Online (Sandbox Code Playgroud) 我经历了很多问题,却找不到我想要的东西.我有一个这样的列表:
[2, 3, 5, 7, 11]
我想将它转换为格式的字典:即列表的值应该是键,每个相关的值应该为零.
{2:0 , 3:0 , 5:0 , 7:0 , 11:0}
我有一个列表用作字典的键,并且对应于键的每个值都将初始化为0。