【问题标题】:Arrange tuples nested in a list of dictionaries排列嵌套在字典列表中的元组
【发布时间】:2013-12-12 09:29:55
【问题描述】:

我有一个包含嵌套元组的字典列表,如下所示。

d = [ 
('sprayed', {'paint': (4.0, None), 'car': (5.0, None), 'water': (None, 9.0), 'hose': (7.0, 6.0)}), 
('cherished', {'time': (None, 5.0), 'family': (4.0, None), 'gift': (None, 9.0)})
]

我想使用每个元组中的第一项按降序对其进行排序。结果应如下所示:

d2 = [ 
('sprayed', {'hose': (7.0, 6.0), 'car': (5.0, None), 'paint': (4.0, 9.0), 'water': (None, 9.0)}), 
('cherished', {'family': (4.0, None), 'time': (None, 5.0), 'gift': (None, 9.0)})
]

我尝试使用:

s2 = []
for k, v in s:
    new_list = sorted(zip(v[::2], v[1::2]), key=lambda x: float(x[1]), reverse=True)

但它没有通过。我当然在这里遗漏了一些明显的东西,我提前道歉,但如果有人能指出解决方案,我将不胜感激。

【问题讨论】:

  • 字典不是排序实体。您可能正在寻找 collections.OrderedDict
  • 另外,在 Python 3 中,None 不可订购:3.0 < None => TypeError: unorderable types: float() < NoneType()
  • 您的一个元组也发生了变化 - 'hose': (7.0, 6.0) 变为 'hose': (7.0, None)。这是错字还是部分逻辑?
  • @LegoStormtroopr 我打错了,谢谢你发现它。
  • @Blckknght。谢谢,我会尝试用零替换None

标签: python sorting python-3.x dictionary tuples


【解决方案1】:

假设sdv 将是一个字典,所以表达式zip(v[::2], v[1::2]) 将不起作用。字典不是序列,你不能像使用列表那样对它们进行切片。要获得dict(key, value) 对序列,只需执行v.items() 而不是zip 的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 2021-08-14
    • 2019-05-08
    • 2017-12-27
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多