如何相互比较元组列表的字典?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何相互比较元组列表的字典?相关的知识,希望对你有一定的参考价值。

没有代码很难描述这个问题。这就是我需要帮助的地方。

{'22': [('22_0',['A','B','C','D']),
      ('22_1',['B','C','D','E']),
      ('22_2',['A','B','C'])]


'33': [('33_0',['A','B','C','D']),
      ('33_1',['A','B','C','D']),
      ('33_2',['A','B','C','D'])]}


Should return [False, True], description below.

我想遍历defaultdict列表项,如果嵌套元组的所有第二个值都彼此相等,则返回True,否则返回False。值列表中可以有任意数量的嵌套元组。

以上字典的代码应返回[False,True]。

任何帮助都会很棒。

谢谢!

答案

您可以将all()与列表理解一起使用,以检查元组中的所有第二个值是否与第一个元组中的第二个项匹配。

d = {
    '22': [('22_0', ['A', 'B', 'C', 'D']),
           ('22_1', ['B', 'C', 'D', 'E']),
           ('22_2', ['A', 'B', 'C'])],

    '33': [('33_0', ['A', 'B', 'C', 'D']),
           ('33_1', ['A', 'B', 'C', 'D']),
           ('33_2', ['A', 'B', 'C', 'D'])]
}

result = []
for key, value in d.items():
    result.append((key, all([i[1] == value[0][1] for i in value])))
print(result)

结果,我将布尔值与它所引用的字典键配对,因为字典并不总是按照我们期望的顺序访问项目:[('22', False), ('33', True)]

另一答案

给出

输入字典

d = {
    "22": [
        ("22_0", ["A", "B", "C", "D"]),
        ("22_1", ["B", "C", "D", "E"]),
        ("22_2", ["A", "B", "C"]),
    ],
    "33": [
         ("33_0", ["A", "B", "C", "D"]),
         ("33_1", ["A", "B", "C", "D"]),
         ("33_2", ["A", "B", "C", "D"]),
    ]
}

代码

def idx_1(seq):
    """Return the element at index 1."""
    return seq[1]


def all_equal(seq):
    """Return True if all elements are equal."""
    return len(set(seq)) == 1


get_items = lambda x: map(idx_1, map(idx_1, x))

Demo

[all_equal(get_items(x)) for x in d.values()]

相当于

second_vals = map(get_items, d.values())
list(map(all_equal, second_vals))
# [False, True]

以上是关于如何相互比较元组列表的字典?的主要内容,如果未能解决你的问题,请参考以下文章

python 字符串,列表,元组,字典相互转换

Python列表元组集合字典的区别和相互转换

Python 字符串/列表/元组/字典之间的相互转换

Python列表元组集合字典的区别和相互转换

python 列表,元组,字典,集合,字符串相互转换

Python - 列表与字典相互转换