我尝试以编程方式创建列表字典是不允许我单独地解决字典键.每当我创建列表字典并尝试附加到一个键时,所有这些都会更新.这是一个非常简单的测试用例:
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方法不能按预期工作?
我想使用初始化集合的字典(在Python 2.6中)dict.fromkeys,但结果结构表现奇怪.进一步来说:
>>>> x = {}.fromkeys(range(10), set([]))
>>>> x
{0: set([]), 1: set([]), 2: set([]), 3: set([]), 4: set([]), 5: set([]), 6: set([]), 7: set([]), 8: set([]), 9: set([])}
>>>> x[5].add(3)
>>>> x
{0: set([3]), 1: set([3]), 2: set([3]), 3: set([3]), 4: set([3]), 5: set([3]), 6: set([3]), 7: set([3]), 8: set([3]), 9: set([3])}
Run Code Online (Sandbox Code Playgroud)
我显然不想在所有集合中添加3,仅添加到对应的集合x[5].当然,我可以通过初始化避免问题x没有fromkeys,但我想了解我在这里失踪.
我试图根据字符串中有1的数目将某些数字的二进制字符串组合在一起。
这不起作用:
s = "0 1 3 7 8 9 11 15"
numbers = map(int, s.split())
binaries = [bin(x)[2:].rjust(4, '0') for x in numbers]
one_groups = dict.fromkeys(range(5), [])
for x in binaries:
one_groups[x.count('1')] += [x]
Run Code Online (Sandbox Code Playgroud)
预期的字典one_groups需要是
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Run Code Online (Sandbox Code Playgroud)
但是我明白了
{0: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
1: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
2: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
3: …Run Code Online (Sandbox Code Playgroud) 我有一个日期名称列表(通常是周一至周六,但特殊情况适用),我想创建一个字典.我想将每天的值初始化为零.
如果我有一个零列表与日期列表相同的长度,这将是一个简单的用例zip().但是,零列表是浪费空间,如果这是唯一的解决方案,我会尽快做到:
for day in weekList:
dayDict[day] = 0
Run Code Online (Sandbox Code Playgroud)
有更多的pythonic方式吗?
我有一个空列表字典,其中包含在开头声明的所有键:
>>> 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中实现这一点?
我正在尝试创建一个列表的字典,可以附加到for循环中.但是,如果我使用创建一个dict fromkeys,列表将成为"指针"的副本,而不是新列表.例如,
newdict = dict.fromkeys(range(10), [])
- 要么 -
newdict = dict.fromkeys(range(10), list())
两者都产生相同的数据结构,一个带有SAME列表的dict作为值对.因此,当任何键更新时,例如 - newdict[0].append(100),相应的输出print newdict是:
{0: [100], 1: [100], 2: [100], 3: [100], 4: [100], 5: [100], 6: [100], 7: [100], 8: [100], 9: [100]}
有关如何避免这种情况而不必在for循环中迭代的任何想法?提前致谢.