【问题标题】:Python: Ordering Nested DictionariesPython:排序嵌套字典
【发布时间】:2021-07-27 07:47:28
【问题描述】:

我想订购一些嵌套字典以匹配此列表的顺序:

vehicle_type = ['Car', 'Bike', 'Bus']

这是当前嵌套字典的样子:

vehicles = {'2018': {'Bike': 2542, 'Bus': 37, 'Car': 33432}, '2012': {'Car': 68122, 'Bike': 164, 'Bus': 1653}, '2001': {'Car': 12127, 'Bus': 324, 'Bike': 4222}}

我已经组织了代表年份的外部键:

ordered_dict = [(k, vehicles[k]) for k in sorted(list(vehicles.keys()))]

我只是不确定我每年如何按照我的车辆类型列表的顺序组织他们的钥匙? 我可能是个笨蛋

【问题讨论】:

  • 给定一个带有正确键但任意顺序的字典D{key: D[key] for key in vehicle_type} 将以正确的顺序生成一个新字典。如果某些字典可能缺少键(此代码将变成显式的Nones),请更改为{key: D.get(key) for ...

标签: python sorting dictionary nested


【解决方案1】:

我们可以使用dict comprehension 根据您的输入列表重新排序您的密钥。

new_vehicles = {key: {d: v.get(d) for d in vehicle_type} for key, v in vehicles.items()}

new_vehicles
#{'2018': {'Car': 33432, 'Bike': 2542, 'Bus': 37}, '2012': {'Car': 68122, 'Bike': 164, 'Bus': 1653}, '2001': {'Car': 12127, 'Bike': 4222, 'Bus': 324}}

【讨论】:

  • 这很完美!我尝试的方法是如此接近哈哈
【解决方案2】:

如果你想要一个类似的字典

{'Bike': {'2001', 164, '2012', 4222, '2018', 2542}, 'Bus': {'2001', 324, 37, 1653, '2012', '2018'}, 'Car': {'2001', 33432, '2012', 68122, '2018', 12127}}

你应该写类似的东西

vehicles_by_type = {}
for year, vehicle_in_year in vehicles.items():
    for vehicle_type, x in vehicle_in_year.items():
        if not vehicle_type in vehicles_by_type:
            vehicles_by_type[vehicle_type] = {}
        vehicles_by_type[vehicle_type].update({year, x})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多