python - 如何根据 csv 文件中的重复数字制作具有单个值的字典

标签 python csv dictionary duplicates

我是 Python 新手,想为我的 csv 文件创建一个字典。我的数据格式如下:

c1     c2     p    trade
GER   USA     1     100
GER   ITA     1     80
JPN   ITA     2     120
USA   GBR     1     70
DNK   CAN     2     100
USA   DNK     2     70
DNK   GER     1     40
FRA   GER     4     50
USA   GER     6     80

我打算创建一个字典,其键是国家/地区(c1 和 c2),值是产品(p)。像这样的事情:

dic_c1c2_products={"GER": 1, 4,6 "USA":1,2,6 "ITA": 1,2, "JPN": 2 "GBR":1, DNK:"2,1 "CAN":2 "FRA:4} 

我编写了以下代码,但它无法正常工作:

rfile = open('filepath','r')
dic_c1c2_products = {}
for i in rfile :
    lns = i.strip().split(',')
    c1 = lns[0]
    c2 = lns[1]
    p = lns[2]
    if not dic_c1c2_products.has_key(c1) and not dic_c1c2_products.has_key(c2):
         dic_c1c2_products[c1] = [p,]
         dic_c1c2_products[c2]=[p,]
    elif dic_c1c2_products.has_key(c1) and not dic_c1c2_products.has_key(c2):
         dic_c1c2_products[c2]=[p,]
         if p not in dic_c1c2_products[c1]:
              dic_c1c2_products[c1].append(p)
   elif not dic_c1c2_products.has_key(c1) and dic_c1c2_products.has_key(c2):
         dic_c1c2_products[c1] = [p,]
         if p not in dic_c1c2_products[c2]:
             dic_c1c2_products[c2].append(p)
    elif dic_c1c2_products.has_key(c1) and dic_c1c2_products.has_key(c2):
         if p not in dic_c1c2_products[c2] and dic_c1c2_products[c1]:
             dic_c1c2_products[c1].append(p)
             dic_c1c2_products[c2].append(p)

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用collections.defaultdict:

import csv
from collections import defaultdict
d= defaultdict(set)

with open('eggs.csv', 'rb') as csvfile:
     spamreader = csv.reader(csvfile, delimiter=',')
     for row in spamreader:
          i,j,k=row[:3]
          d[i].add(k)
          d[j].add(k)

您所需要的只是创建一个 defaultdict ,并将 set 对象作为其值,然后循环遍历行并插入第一个和第二个作为其键,并将第三个元素添加到设置值。

关于python - 如何根据 csv 文件中的重复数字制作具有单个值的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29852419/

相关文章:

python - 遍历 csv 文件并绘制列?

python - 使用 csv.DictReader 读取时如何处理具有重复字段名的 csv 文件?

python - 如何在 pandas 数据框中的第二行添加列标题?

c# - 如何在uwp中使用OSM离线 map ?

python - 列出嵌套字典中的重复值

字典的 python boolean 键

python - 如何将输入放入已经存在的字符串中?

python - 使用 python 库发送 xmpp 消息

python - 在 Windows 7 的 virtualenv 中安装 MySQL-python

python - 在 csv python 中查找元素的最佳方法