DICT列表中的值-Python 3

DICT列表中的值-Python 3,python,list,dictionary,Python,List,Dictionary,我想提取字典值列表,以便将它们写入csv 使用上一篇文章中的信息,我试图复制所有键、值 In [41]: dicts = [ ...: {"name": "Tom", "age": 10}, ...: {"name": "Mark", "age": 5}, ...: {"name": "Pam", "age": 7}, ...: {"name": "Dick", "age": 12}, ...: ] 然而,我得到的输出非常复杂,有时是一个dict,有时是

我想提取字典值列表,以便将它们写入csv

使用上一篇文章中的信息,我试图复制所有键、值

In [41]: dicts = [
    ...: {"name": "Tom", "age": 10},
    ...: {"name": "Mark", "age": 5},
    ...: {"name": "Pam", "age": 7},
    ...: {"name": "Dick", "age": 12},
    ...: ]
然而,我得到的输出非常复杂,有时是一个dict,有时是一个值

In [25]: for item in dicts:
    ...:     for k, v in item.items():
    ...:         print("Key: {0} and Value: {1}".format(k,v))
    ...:
    ...:
Key: name and Value: {'name': 'Dick', 'age': 12, 0: {...}}
Key: age and Value: 10
Key: 0 and Value: {'name': 'Dick', 'age': 12, 0: {...}}
Key: name and Value: Mark
Key: age and Value: 5
Key: name and Value: Pam
Key: age and Value: 7
Key: name and Value: Dick
Key: age and Value: 12
Key: 0 and Value: {'name': 'Dick', 'age': 12, 0: {...}}
我希望输出中没有dicts,所有的键和值都被提取出来。我知道有更好的方法可以做到这一点,但错误是由于错误地粘贴到ipython

已编辑 更新的格言 已更新 使用更新的DICT的输出按预期工作

In [49]: for item in dicts:
    ...:     for k, v in item.items():
    ...:         print("Key: {0} and Value: {1}".format(k,v))
    ...:
Key: name and Value: Tom
Key: age and Value: 10
Key: name and Value: Mark
Key: age and Value: 5
Key: name and Value: Pam
Key: age and Value: 7
Key: name and Value: Dick
Key: age and Value: 12

为什么不在列表中枚举并提取值:

for i, entry in enumerate(dicts):
...             print entry['name']," ",entry['age']
然后可以将这些值写入csv文件

with open('dict.csv', 'wb') as csv_file:
...         writer = csv.writer(csv_file)
...         for i, entry in enumerate(dicts):
...             writer.writerow([entry['name'],entry['age']])

为什么不在列表中枚举并提取值:

for i, entry in enumerate(dicts):
...             print entry['name']," ",entry['age']
然后可以将这些值写入csv文件

with open('dict.csv', 'wb') as csv_file:
...         writer = csv.writer(csv_file)
...         for i, entry in enumerate(dicts):
...             writer.writerow([entry['name'],entry['age']])

您可以重新构建dict以满足您的需要:

dicts = [{'key': k, 'value': v} for item in dicts for k,v in item.items()]

for item in dicts:
    print("Key: {key} and Value: {value}".format(**item))
但是,要将它们直接写入csv,有一种更好的方法:

import csv

dicts = [{'key': k, 'value': v} for item in dicts for k,v in item.items()]

with open('dicts.csv', 'wb') as f:
    dict_writer = csv.DictWriter(f, dicts[0].keys())
    dict_writer.writeheader()
    dict_writer.writerows(dicts)

您可以重新构建dict以满足您的需要:

dicts = [{'key': k, 'value': v} for item in dicts for k,v in item.items()]

for item in dicts:
    print("Key: {key} and Value: {value}".format(**item))
但是,要将它们直接写入csv,有一种更好的方法:

import csv

dicts = [{'key': k, 'value': v} for item in dicts for k,v in item.items()]

with open('dicts.csv', 'wb') as f:
    dict_writer = csv.DictWriter(f, dicts[0].keys())
    dict_writer.writeheader()
    dict_writer.writerows(dicts)

您可以将相同键的列表dict转换为具有相同键的dict,并且值是按原始顺序排列的原始值列表:

dicts = [
    {"name": "Tom", "age": 10},
    {"name": "Pam", "age": 7},
    {"name": "Dick", "age": 12},
]

dictoflists = {k: [d[k] for d in dicts] for k in dicts[0].keys()}

您可以将相同键的列表dict转换为具有相同键的dict,并且值是按原始顺序排列的原始值列表:

dicts = [
    {"name": "Tom", "age": 10},
    {"name": "Pam", "age": 7},
    {"name": "Dick", "age": 12},
]

dictoflists = {k: [d[k] for d in dicts] for k in dicts[0].keys()}

我无法复制你的输出。我没有收到任何记录。你的
记录几乎肯定已损坏。无法复制。我得到了你应该得到的,或者更确切地说,得到了你应该得到的。另外,注意递归
0:{…}
的存在,这表明你已经独立地做了类似于:
dicts[0][0]=dicts[0]
的事情,然后是类似于
dicts[3][0]=dicts[0]
,您考虑过csv.DictWriter吗?我无法复制您的输出。我没有收到任何记录。你的
记录几乎肯定已损坏。无法复制。我得到了你应该得到的,或者更确切地说,得到了你应该得到的。另外,注意递归
0:{…}
的存在,这表明你已经独立地做了类似于:
dicts[0][0]=dicts[0]
的事情,然后是类似于
dicts[3][0]=dicts[0]
,您是否考虑过
csv.DictWriter
?因为我使用python3,所以您的eumerate很好,但我在enumerate(dicts)中的I条目中使用它:print({0},{1})。format(entry['name',entry['age']),因为我使用python3,所以您的eumerate很好,但我在enumerate(dicts)中的I条目中使用它:print({0},{1})。format(条目['name'],条目['age']))