【问题标题】:Separate dicts into three lists preserving order based on key根据键将字典分成三个保留顺序的列表
【发布时间】:2018-06-06 20:46:59
【问题描述】:

好吧,也许我的标题不是最好的,但这基本上是我的问题: 我有三个看起来像这样的字典:

dict1 = {'America': 200, 'Europe': 344, 'Asia': 204, 'Oceania': 38, 'Africa': 14}
dict2 = {'Europe': 394, 'America': 225, 'Asia': 293, 'Oceania': 43, 'Africa': 26}
dict3 = {'Europe': 420, 'America': 250, 'Asia': 363, 'Oceania': 43, 'Africa': 27}

我想做的是,将字典分成三个列表,根据它们的键值正确“拆分”,就像这样:

list1 = [200, 344, 204, 38, 14]
list2 = [225, 394, 293, 43, 26]
list3 = [250, 420, 363, 43, 27]

编辑:所需顺序 = ['America', 'Europe', 'Asia', 'Oceania', 'Africa']

这很容易吗?我尝试了一堆 for 循环,但无法正确保持顺序。

【问题讨论】:

  • 我不明白你想要什么顺序。 list1有欧洲、美洲、亚洲、大洋洲、非洲; list2list3 有美洲、欧洲、亚洲、大洋洲、非洲。因此,您似乎正试图从 dict 中获得相同的无意义的任意顺序,然后交换前两个值,我无法想象这为什么会有用。
  • 您的示例顺序不一致 - 您要保持什么顺序?
  • 任何合理的事情都很容易做到。例如,如果您想要排序键顺序的值(所有三个字典都为Africa, America, Asia, Europe, Oceania),那只是list1 = [dict1[key] for key in sorted(dict1)]?但是你必须先知道你想要什么顺序,并且能够用文字表达出来,然后你(或其他任何人)才能为它编写代码。
  • 哦,很抱歉不清楚这一点,字典可以按他们想要的任何方式排序。编辑它更清楚。

标签: python list dictionary key


【解决方案1】:

Python 中有一个内置的字典方法

list1 = dict1.values()

等等……

结果

dict_values([200, 344, 204, 38, 14])

此外,您可以使用列表推导

list1 = [x for y,x in dict1.items()]

结果

[200, 344, 204, 38, 14]

【讨论】:

    【解决方案2】:

    如果键的顺序是任意的,那么您需要将其硬编码为一些可迭代的。然后,您可以使用列表推导以所需的顺序从键中获取值。

    d1 = {'America': 200, 'Europe': 344, 'Asia': 204, 'Oceania': 38, 'Africa': 14}
    d2 = {'Europe': 394, 'America': 225, 'Asia': 293, 'Oceania': 43, 'Africa': 26}
    d3 = {'Europe': 420, 'America': 250, 'Asia': 363, 'Oceania': 43, 'Africa': 27}
    
    order = ['America', 'Europe', 'Asia', 'Oceania', 'Africa']
    
    list1 = [d1[k] for k in order] # [200, 344, 204, 38, 14]
    list2 = [d2[k] for k in order] # [225, 394, 293, 43, 26]
    list3 = [d3[k] for k in order] # [250, 420, 363, 43, 27]
    

    【讨论】:

    • 这成功了!谢谢,但感谢另一位用户,我找到了更好的方法。
    • @PEREZje 其他答案是否真的保持秩序?如果 dicts 是使用 Python3.6+ 以相同的方式生成的,则应该这样做,但在任何其他情况下都不会。
    • 我把解决方案作为这篇文章的答案,为了我的目的,它保留了秩序。如果我想要一个不同的顺序,你的方法会更好。
    • @PEREZje 我不确定是否理解您要查找的顺序,但如果 abarnet 的回答有效,那就太好了
    • 我并不是真的在寻找特定的顺序,只是三个列表的顺序相同。 @abarnert 回答有助于让 python “选择”订单,如果我想选择自己的订单,你的方式会更好。
    【解决方案3】:

    感谢@abarnert,我找到了最好的解决方案:

    list1 = [count_2016[key] for key in sorted(count_2016)]
    list2 = [count_2017[key] for key in sorted(count_2017)]
    list3 = [count_2018[key] for key in sorted(count_2018)]
    

    这会为每个列表保留相同的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 2020-01-12
      • 2014-10-22
      • 2021-09-07
      • 2021-07-27
      • 2022-11-16
      • 2019-01-23
      相关资源
      最近更新 更多