2017-08-30 51 views
0

我想提取字典值的列表,以便我可以把它們寫到CSV。價值觀類型的字典列表 - Python的3

在此以前SO question使用信息,我試圖複製所有關鍵,價值觀。

In [41]: dicts = [ 
    ...: {"name": "Tom", "age": 10}, 
    ...: {"name": "Mark", "age": 5}, 
    ...: {"name": "Pam", "age": 7}, 
    ...: {"name": "Dick", "age": 12}, 
    ...: ] 

但是,我得到的輸出是非常混雜,有時它是一個字典,有時是一個值。

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: {...}} 

我希望輸出中沒有任何字符在其中提取所有的鍵和值。有更好的方法來做到這一點,我看到,但錯誤是從錯誤地粘貼到ipython。

編輯 更新日文N3 N4 N5 更新 輸出與更新的日文N3 N4 N5不會按預期方式工作。

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 
+2

我無法重現你的輸出。我沒有得到任何字跡。 –

+1

你的'dicts'幾乎肯定會損壞。 – TemporalWolf

+4

無法重現。我得到你應該的,或者說,你應該期望的。 –

回答

1

爲什麼不枚舉列表並提取值:

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']]) 
+1

因爲我使用python3你eumerate是好的,但我得到它的工作使用我,在枚舉條目(類型的字典): 打印(「{0},{1}」格式(進入[「名」],進入[」年齡'])) – sayth

1

可以重新構建快譯通,以滿足您的需求:

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)