list1 = [99,55]
dict1 = {'k1':[],'k2':[]}
for num in list1:
if num > 77:
dict1['k1'].append(num)
else:
dict1['k2'].append(num)
print(dict1){'k1':99,'k2':55}
但是当我替换dict1 = {'k1':[],'k2':[]}到{}.fromkeys('k1','k2',[])时,结果变成{'k1':99,55,'k2':99,55}
为什么会发生这种事?我真的不知道。
发布于 2021-04-17 11:47:53
之所以会发生这种情况,是因为要将相同的list对象传递给两个键。这与为变量创建别名时的情况相同:
a = []
b = a
a.append(55)
b.append(99)
print(b)打印[55, 99],因为它是相同的列表实例。
如果您希望从一个键列表中使其更加简洁,以便使用空列表进行初始化,则可以这样做:
dict1 = {k: [] for k in ('k1', 'k2')}这将为每个键创建一个新的list实例。
或者,您可以使用defaultdict
from collections import defaultdict
list1 = [99,55]
dict1 = defaultdict(list)
for num in list1:
if num > 77:
dict1['k1'].append(num)
else:
dict1['k2'].append(num)
print(dict1)也很管用。
发布于 2021-04-17 14:41:13
fromKeys()还可以提供一个可变对象作为默认值。如果我们在原始列表中追加值,则在所有键的值中都会追加。示例:
list1 = ['a', 'b', 'c', 'd']
list2 = ['SALIO']
dict1 = dict.fromkeys(list1, list2)
print(dict1)产出:
{'a': ['SALIO'], 'b': ['SALIO'], 'c': ['SALIO'], 'd': ['SALIO']}然后你可以使用这个:
list1 = ['k1', 'k2']
dict1 = {'k1':[],'k2':[]}
list2 =[99,55]
for num in list2:
if num > 77:
a = ['k1']
dict1 = dict.fromkeys(a, [num])
else:
b = ['k2']
dict2 = dict.fromkeys(b,[num] )
res = {**dict1, **dict2}
print(res)产出:
{'k1': [99], 'k2': [55]}您还可以使用python代码合并dict代码:这个函数:
def Merge(dict1, dict2):
return(dict2.update(dict1))然后:
print(Merge(dict1, dict2)) #This return None
print(dict2) # changes made in dict2https://stackoverflow.com/questions/67137627
复制相似问题