Python-将元组值添加到dict中的重复键

Python-将元组值添加到dict中的重复键,python,csv,dictionary,key,tuples,Python,Csv,Dictionary,Key,Tuples,我一直在尝试转换此test.csv文件: a,b,4 a,c,2 b,a,4 b,c,1 b,d,5 c,a,2 c,b,1 c,d,8 c,e,10 d,b,5 d,c,8 d,e,2 d,z,6 e,c,10 e,d,2 e,z,3 z,d,6 z,e,3 转换成这种格式。到目前为止,当我尝试转换它时,重复的键被覆盖,而不是作为第二个值添加。有人能告诉我如何得到这个格式吗 G1 = { 'a': [('b', 4), ('c', 2)], 'b': [('a', 4), (

我一直在尝试转换此test.csv文件:

a,b,4
a,c,2
b,a,4
b,c,1
b,d,5
c,a,2
c,b,1
c,d,8
c,e,10
d,b,5
d,c,8
d,e,2
d,z,6
e,c,10
e,d,2
e,z,3
z,d,6
z,e,3
转换成这种格式。到目前为止,当我尝试转换它时,重复的键被覆盖,而不是作为第二个值添加。有人能告诉我如何得到这个格式吗

G1 = {
    'a': [('b', 4), ('c', 2)],
    'b': [('a', 4), ('c', 1), ('d', 5)],
    'c': [('a', 2), ('b', 1), ('d', 8), ('e', 10)],
    'd': [('b', 5), ('c', 8), ('e', 2), ('z', 6)],
    'e': [('c', 10), ('d', 2), ('z', 3)],
    'z': [('d', 6), ('e', 3)],
}
这是将文件转换为dict的代码,但会替换重复键的新值。我想知道如何将值添加为元组,对于重复的键,将元组添加为第二个值

reader = csv.reader(open('test.csv'))
arcos = {}
for row in reader:
    key = row[0]
    arcos[key] = row[1:]
结果是:

{
'a': ['c', 2.0],
 'b': ['d', 5.0],
 'c': ['e', 10.0],
 'd': ['z', 6.0],
 'e': ['z', 3.0],
 'z': ['e', 3.0]
}

我希望我所请求的是可能的。

使用
defaultdict
list
类,迭代文件并附加元组:

from collections import defaultdict

G = defaultdict(list)

with open('test.csv') as file:
    for line in file:
        key, letter, digit = line.strip().split(',')
        digit = int(digit)
        G[key].append((letter, digit))

您可以使用
groupby
方法并简化此过程:

from itertools import groupby

with open('out.csv') as f:
    print({k:[(i.split(',')[1],i.split(',')[2]) for i in g] for k, g in groupby([i.strip() for i in f],lambda x: x.split(',')[0])})
结果:

 {'a': [('b', '4'), ('c', '2')], 'c': [('a', '2'), ('b', '1'), ('d', '8'), ('e', '10')], 'b': [('a', '4'), ('c', '1'), ('d', '5')], 'e': [('c', '10'), ('d', '2'), ('z', '3')], 'd': [('b', '5'), ('c', '8'), ('e', '2'), ('z', '6')], 'z': [('d', '6'), ('e', '3')]}

可能您没有对列表类型使用
append
。请出示你的密码。