Python-使字典的顺序与另一个字典的顺序相同

  • 本文关键字:字典 顺序 另一个 Python- python
  • 更新时间 :
  • 英文 :


我有两个字典,例如dictionary1的顺序为:

{'id': '1234', 'Name': 'John', 'dob': '01/01/2001', 'Address': 'Long Street'}

而dictionary2例如被排序为:

{'id': '1235', 'dob': '01/01/2002', 'Address': 'Tower Street', 'Name': 'Michael'}

无论密钥的名称或数量如何,我都需要dictionary2的顺序与dictionary1的顺序相匹配,因为这可能会动态变化。

dictionary2应该变成:

{'id': '1235', 'Name': 'Michael', 'dob': '01/01/2002', 'Address': 'Tower Street'}

有办法做到这一点吗?我没有取得任何成功,也没有发现类似的问题。

非常感谢!

我个人不会这么做,而是将dict转换为元组序列,或者使用OrderedDict(如果只是为了显式的话(。

然而,如果您坚持这样做,并依赖Python 3.7+插入顺序的语义,这将起作用:

dict2 = {key: dict2[key] for key in dict1}


您评论说您正在使用它写入csv。如果您正在使用stdlib的csv模块,DictWriter可以提供帮助。

否则,另一种选择是按顺序提取它们,而不是逐个订购:

from operator import itemgetter
columns = tuple(dict1.keys())
extract = itemgetter(*columns)
dicts = [dict1, dict2, ...]  # Fill this
for d in dicts:
values = extract(d)
# Use values

既然你说他们有相同的键。。。只需使用CCD_ 6的键/顺序和CCD_。

d2 = dict(zip(d1, map(d2.get, d1)))

如前所述,dicts不按键执行任何类型的排序(它们可能按插入时间排序,具体取决于您使用的python版本(。

但是,您总是可以将dict表示为键值元组的列表:

d1 = {'id': '1234', 'Name': 'John', 'dob': '01/01/2001', 'Address': 'Long Street'}
d2 = {'id': '1235', 'dob': '01/01/2002', 'Address': 'Tower Street', 'Name': 'Michael'}
print(sorted(d1.items()))  # [('Address', 'Long Street'), ('Name', 'John'), ('dob', '01/01/2001'), ('id', '1234')]
print(sorted(d2.items()))  # [('Address', 'Tower Street'), ('Name', 'Michael'), ('dob', '01/01/2002'), ('id', '1235')]

您在评论中提到,需要将订单写入CSV文件。在这种情况下,忘记订单。csv.DictWritter允许通过提供dict写入CSV文件,并根据列对其进行排序。

import csv
d1 = {'id': '1234', 'Name': 'John', 'dob': '01/01/2001', 'Address': 'Long Street'}
d2 = {'id': '1235', 'dob': '01/01/2002', 'Address': 'Tower Street', 'Name': 'Michael'}
with open('OUTPUT_FILE.csv', 'w', newline='') as f:
fieldnames = 'id', 'Name', 'dob', 'Address'
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()  # id,Name,dob,Address
writer.writerow(d1)   # 1234,John,01/01/2001,Long Street
writer.writerow(d2)   # 1235,Michael,01/01/2002,Tower Street

最新更新