Python 使用复合键从字典中写入csv文件

Python 使用复合键从字典中写入csv文件,python,csv,dictionary,Python,Csv,Dictionary,我有一本字典,它的键是由两个项组成的元组。我想把这本字典写成.csv文件 我的字典计数器如下所示: {("Banana", "Apple") : 1, ("Apple", "Pear") : 2, # ... } 我试过这个: header = ['group', 'list', 'id'] with open("file.csv", 'w') as f2: writer = csv

我有一本字典,它的键是由两个项组成的元组。我想把这本字典写成
.csv
文件

我的字典
计数器
如下所示:

{("Banana", "Apple") : 1,
 ("Apple", "Pear") : 2,
 # ...
}
我试过这个:

header = ['group', 'list', 'id']
with open("file.csv", 'w') as f2:
    writer = csv.DictWriter(f2, fieldnames=header)
    writer.writeheader()
    for key, val in counter.items(): 
        write.writerow([key]+val)
但我得到了这个错误:

TypeError:只能将列表(而不是“int”)连接到列表

有人能帮我吗

编辑 我也试过这个:

with open("file.csv", 'w+') as f2:
    writer = csv.DictWriter(f2, fieldnames=header)
    writer.writeheader()
    for key, val in counter.items():
        writer.writerow(key,val)
但它现在说:


TypeError:writerow()接受2个位置参数,但给出了3个

如何将普通的
与open一起使用

with open("file.csv", 'a+') as f:
    f.write('group' + ',' + 'list' + ',' + 'id'
    for key, value in f2.items():
        f.write(key[0] + ',' + key[1] + ',' + str(value))
正如前面提到的,如果不知道
计数器是什么,我们真的无法提供帮助,但是,我想我知道出了什么问题

你说的是不可能的。每个字典都有等量的键作为值,一个键没有值就不可能存在

从你的问题来看,我认为这就是你想要的:

header = ['group', 'list', 'id']
with open('file.csv', 'w+') as f:
    writer = csv.DictWriter(f, fieldnames=header)
    writer.writeheader()
    keys = list(counter.keys())
    values = list(counter.items())
    writer.writerow([keys[0], keys[1], values[0]])

从您添加的
计数器
字典的内容示例中,我现在明白了您的意图

以下是如何实现您的目标:

import csv

counter = {("Banana", "Apple"): 1,
           ("Apple", "Pear"): 2,
           # ...
          }

header = 'group', 'list', 'id'
with open("compound_keys.csv", 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=header)
    writer.writeheader()
    for (group, list_), id in counter.items():
        writer.writerow(dict(zip(header, (group, list_, id))))
创建的
.csv
文件的内容:

组、列表、id
香蕉,苹果,1
苹果,梨,2
注意

在这种情况下,使用一个而不是
csv.DictWriter
将更简单、更有效,因为这样就不必创建一个临时字典来写入输出文件的每一行(仅一个元组)

以下结果完全相同:

header = 'group', 'list', 'id'
with open("compound_keys.csv", 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    for (group, list_), id in counter.items():
        writer.writerow((group, list_, id))

counter
从哪里来?它是什么?对不起,counter是我的字典,应该提到它才有帮助。请展示这本词典中的内容(或者至少是它的一个样本,如果它很大的话),因为这样可以回答你的问题我有来自DictionNaryTanks的这类键作为答案,但我得到了以下错误:AttributeError:“list”对象没有此换行器的属性“keys”。writerow([keys[0],keys[1],values[0])感谢您的回答,但它不会产生我想要的结果。。。。