我有一个看起来像这样的csv
0 0001eeaf4aed83f9 freeform /m/0cmf2 1 0.022464 0.964178 0.070656 0.800164 0 0 0 0 0
1 000595fe6fee6369 freeform /m/02wbm 1 0.000000 1.000000 0.000233 1.000000 0 0 1 0 0
2 000595fe6fee6369 freeform /m/02xwb 1 0.141030 0.180277 0.676262 0.732455 0 0 0 0 0
3 000595fe6fee6369 freeform /m/02xwb 1 0.213781 0.253028 0.298764 0.354956 1 0 0 0 0
4 000595fe6fee6369 freeform /m/02xwb 1 0.232926 0.288447 0.488954 0.545146 1 0 0 0 0
正如您在第二列中看到的那样,第一个值仅出现一次,但是第二个值出现4次,在这里我要做的是将第二列的值设置为键,并附加第6、7、8和9元素作为字典的值。如果键相同,则继续追加,不要覆盖以前的值。我现在拥有的是
image_dict={}
for index, item in enumerate(data.ImageID):
image_dict[item] = []
image_dict[item].append((data.XMax[index], data.XMin[index], data.YMax[index], data.YMin[index]))
这给了我
{'0001eeaf4aed83f9': [(0.96417800000000009,
0.022463999999999998,
0.80016399999999999,
0.070655999999999997)],
'000595fe6fee6369': [(0.25302800000000003,
0.213781,
0.35495599999999999,
0.29876399999999997)]}
您可以在元素的第二个键中将值覆盖,如何避免这种情况?
任何建议都会非常有帮助,谢谢!
答案 0 :(得分:2)
您每次迭代都将覆盖列表。相反,如果不创建新的密钥列表,您可以检查该密钥是否存在于字典中
例如:
image_dict={}
for index, item in enumerate(data.ImageID):
if item not in image_dict:
image_dict[item] = []
image_dict[item].append((data.XMax[index], data.XMin[index], data.YMax[index], data.YMin[index]))
答案 1 :(得分:1)
from collections import defaultdict
image_dict = defaultdict(list)
for index, item in enumerate(data.ImageID):
image_dict[item].append((data.XMax[index], data.XMin[index], data.YMax[index], data.YMin[index]))
如果不存在则创建一个空列表并将其追加。请参阅文档中的example。