簡體   English   中英

使用Python以相同的順序從CSV創建字典列表

[英]Create list of dictionaries from CSV in the same order using Python

考慮一個CSV,

col1, col2, col3
1000, Star, True
2000, Moon, False

如何以相同的順序創建字典列表

[{'col1': '1000', 'col2': 'Star', 'col3': 'TRUE'}, {'col1': '2000', 'col2': 'Moon', 'col3': 'FALSE'}]

我嘗試使用以下代碼,但順序不同

with open('sample.csv') as f:
    rows = [{k: v for k, v in row.items()}
        for row in csv.DictReader(f, skipinitialspace=True)]

以上代碼的輸出,

[{'col2': 'Star', 'col3': 'TRUE', 'col1': '1000'}, {'col2': 'Moon', 'col3': 'FALSE', 'col1': '2000'}]

有什么解決方案可以使順序相同嗎?

謝謝!

由於字典本質上是無序的,因此您需要在列表中的每個字典上包裝一個OrderedDict ,這些字典需要事先排序:

import csv
from collections import OrderedDict

with open('sample.csv') as f:
    rows = [OrderedDict(sorted(dict((k, v) for k, v in row.items()).items())) for row in csv.DictReader(f, skipinitialspace=True)]

>>> print(rows)
[OrderedDict([('col1', '1000'), ('col2', 'Star'), ('col3', 'True')]), OrderedDict([('col1', '2000'), ('col2', 'Moon'), ('col3', 'False')])]

並正常工作:

>>> print(rows[0]['col1'])
1000
>>> print(rows[1]['col1'])
2000
print([key for key in rows[0]])
['col1', 'col2', 'col3']

注意:您不能用普通字典替換輸出中的OrderedDict()包裝,否則它將再次無序。 如果要使用python訂購字典,這是我們必須支付的價格之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM