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