2024-09-22 14:24:41 发布
网友
我有五本字典,我想要一把他们的钥匙。
alldict = [dict1, dict2, dict3, dict4, dict5]
我试过了
allkey = reduce(lambda x, y: set(x.keys()).union(y.keys()), alldict)
但它给了我一个错误
AttributeError: 'set' object has no attribute 'keys'
我做错了吗?我使用的是普通的forloop,但我想知道为什么上面的代码不起作用。
我认为@chuck已经回答了为什么它不工作的问题,但是一个更简单的方法是记住union方法可以接受多个参数:
union
allkey = set().union(*alldict)
不需要任何循环或lambdas就可以做你想做的事情。
非功能性神经元的简单策略(双关语):
allkey = [] for dictio in alldict: for key in dictio: allkey.append(key) allkey = set(allkey)
我们可以使用集合理解将此代码转换为多排序形式:
allkey = {key for dictio in alldict for key in dictio}
与传统的for循环相比,这一行代码仍然非常可读。 将嵌套循环转换为列表或集合理解的关键是将内部循环(嵌套循环中变化更快的循环)作为最后一个索引(即for key in dictio)。
for key in dictio
您的解决方案适用于列表中的前两个元素,但随后dict1和dict2被缩减为一个集合,该集合作为x放入lambda中。所以现在x不再有方法keys()。
dict1
dict2
x
keys()
解决方案是从一开始就让x成为一个集合,方法是用一个空集合(恰好是union的中性元素)初始化reduction。
用初始化器试试:
allkey = reduce(lambda x, y: x.union(y.keys()), alldict, set())
没有lambdas的另一种选择是:
allkey = reduce(set.union, map(set, map(dict.keys, alldict)))
我认为@chuck已经回答了为什么它不工作的问题,但是一个更简单的方法是记住
union
方法可以接受多个参数:不需要任何循环或lambdas就可以做你想做的事情。
非功能性神经元的简单策略(双关语):
我们可以使用集合理解将此代码转换为多排序形式:
与传统的for循环相比,这一行代码仍然非常可读。 将嵌套循环转换为列表或集合理解的关键是将内部循环(嵌套循环中变化更快的循环)作为最后一个索引(即
for key in dictio
)。您的解决方案适用于列表中的前两个元素,但随后
dict1
和dict2
被缩减为一个集合,该集合作为x
放入lambda中。所以现在x
不再有方法keys()
。解决方案是从一开始就让x成为一个集合,方法是用一个空集合(恰好是union的中性元素)初始化reduction。
用初始化器试试:
没有lambdas的另一种选择是:
相关问题 更多 >
编程相关推荐