[英]Python: How to append list item to dictionary if item equals key?
我正在尝试遍历列表,如果列表项等于字典键,则 append 将列表项添加到字典中。
mylist = [1, 2, 3]
mydict = dict.fromkeys(mylist, [])
for item in mylist:
for key in mydict:
if key == item:
mydict[key].append(item)
print(mydict)
Output:
{1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3]}
所需 output:
{1: [1], 2: [2], 3: [3]}
非常感谢!
那是因为这里:
mydict = dict.fromkeys(mylist, [])
mydict
的值将是相同的 object []
,所以当你 append 到mydict[something]
时,你将附加到同一个列表中,不管是something
。
所有值都相同 object,你 append 三个数字 => 所有值都显示为相同的列表。
为避免这种情况,请为每个键分配新列表:
mydict = {}
for item in mylist:
mydict.setdefault(item, []).append(item)
或者,你知道:
mydict = {key: [key] for key in mylist}
通过使用:
mylist = [1, 2, 3]
mydict = dict.fromkeys(mylist, [])
您正在创建一个 dict,其中包含mylist
中的所有元素作为键,并且 dict 中的所有值都是对同一列表的引用,要修复您可以使用:
mydict = dict.fromkeys(mylist)
for item in mylist:
mydict[item] = [item]
print(mydict)
output:
{1: [1], 2: [2], 3: [3]}
同样的事情,但通过使用字典理解以更有效和紧凑的形式:
mydict = {item: [item] for item in mylist}
这是你想要的吗?
mylist = [1,2,3,3]
mydict = {}
for item in mylist:
if item not in mydict:
mydict[item] = [item]
else:
mydict[item].append(item)
print(mydict)
它将 output: {1: [1], 2: [2], 3: [3, 3]}
mylist = [1, 2, 3]
mydict = dict.fromkeys(mylist, [])
for item in mylist:
for key in mydict:
if key == item:
mydict[key] = [item]
print(mydict)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.