如何将嵌套字典更改为平面数组?

2024-09-27 21:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python来改变这个

之前:

{'NewYork': {'Paris': 12, 'Hawaii': 8, 'Tokyo': 11, 'Incheon': 12, 'LA': 2}, 
 'Beijing': {'Hongkong': 3, 'Cebu': 5},
 'Incheon': {'Cairo': 10, 'LA': 11, 'Tokyo': 1}, 
 'Tokyo': {'NewYork': 12, 'Paris': 14, 'LA': 9}}

之后:

[("NewYork","Paris",12),
 ("NewYork","Hawaii",8),
 ("Newyork","Tokyo",11),
 ("NewYork","Incheon",12),
 ("NewYork","LA",2),
 ("Beijing","HongKong",3),
 ("Beijing","Cebu",5),
 ("Incheon","Cairo",10),
 ("Incheon","LA",11),
 ("Incheon","Tokyo",1),
 ("Tokyo","NewYork",12),
 ("Tokyo","Paris",14),
 ("Tokyo","LA",9)]

我该怎么做


Tags: lacairoparistokyonewyorkbeijinghawaiiincheon
3条回答

这将达到以下目的:

 dict.items()
>>> before = {'NewYork': {'Paris': 12, 'Hawaii': 8, 'Tokyo': 11, 'Incheon': 12, 'LA': 2},
...          'Beijing': {'Hongkong': 3, 'Cebu': 5}, 'Incheon': {'Cairo': 10, 'LA': 11, 'Tokyo': 1},
...          'Tokyo': {'NewYork': 12, 'Paris': 14, 'LA': 9}}
>>>
>>> print [(key,k,v) for key,val in before.iteritems() for k,v in val.iteritems()]

[('NewYork', 'Paris', 12), ('NewYork', 'LA', 2), ('NewYork', 'Hawaii', 8), ('NewYork', 'Incheon', 12), ('NewYork', 'Tokyo', 11), ('Beijing', 'Hongkong', 3), ('Beijin
g', 'Cebu', 5), ('Incheon', 'Cairo', 10), ('Incheon', 'Tokyo', 1), ('Incheon', 'LA', 11), ('Tokyo', 'NewYork', 12), ('Tokyo', 'Paris', 14), ('Tokyo', 'LA', 9)]

可以使用list comprehension和两次迭代来创建数组:

>>> city_pairings = {'NewYork': {'Paris': 12,
...                              'Hawaii': 8,
...                              'Tokyo': 11,
...                              'Incheon': 12,
...                              'LA': 2},
...                  'Beijing': {'Hongkong': 3,
...                              'Cebu': 5},
...                  'Incheon': {'Cairo': 10,
...                              'LA': 11,
...                              'Tokyo': 1},
...                  'Tokyo': {'NewYork': 12,
...                            'Paris': 14,
...                            'LA': 9}}

>>> flat = [(city, other_city, value)
...         for city, pairings in city_pairings.iteritems()
...         for other_city, value in pairings.iteritems()]

>>> from pprint import pprint
>>> pprint(flat)
[('NewYork', 'Paris', 12),
 ('NewYork', 'LA', 2),
 ('NewYork', 'Hawaii', 8),
 ('NewYork', 'Incheon', 12),
 ('NewYork', 'Tokyo', 11),
 ('Beijing', 'Hongkong', 3),
 ('Beijing', 'Cebu', 5),
 ('Incheon', 'Cairo', 10),
 ('Incheon', 'Tokyo', 1),
 ('Incheon', 'LA', 11),
 ('Tokyo', 'NewYork', 12),
 ('Tokyo', 'Paris', 14),
 ('Tokyo', 'LA', 9)]

第二个城市并不完全按照你想要的顺序,因为字典根据某种方案对它们进行了分类。要使城市按插入字典的顺序排列,您必须执行其他操作,例如使用^{}

相关问题 更多 >

    热门问题