在Python 2.6中从迭代器获取最后一项的最佳方法是什么?例如,说
my_iter = iter(range(5))
Run Code Online (Sandbox Code Playgroud)
什么是最短的代码/最干净的方式4来自my_iter?
我可以做到这一点,但它看起来效率不高:
[x for x in my_iter][-1]
Run Code Online (Sandbox Code Playgroud) 假设我有一个任意嵌套的字典:
d = {
11: {
21: {31: 'a', 32: 'b'},
22: {31: 'a', 34: 'c'},
},
12: {
1: {2: 3}
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个键列表,其位置告诉我哪个嵌套字典可以查找每个键:
keys = [11, 21, 31]
# keys = [11, 23, 44]
Run Code Online (Sandbox Code Playgroud)
有一个简单的衬垫来做这个吗?我看了下面列出的问题,它们是相似的,但不是我真正想要的.我自己也试过了,想出了这个:
from functools import reduce
def lookup(d, key):
return d.get(key, {}) if d and isinstance(d, dict) else None
def fn(keys, d):
return reduce(lookup, keys, d)
print(fn(keys, d)) # prints 'a'
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,如果是第二个键列表(参见注释掉的键),它会继续查找嵌套键,即使没有找到更高级别的键,继续也没有意义.我怎么能reduce在找到最终匹配或失败后立即停止(下面列出的一个问题解决了它,但我不能在我的用例中真正应用它......或者我可以吗?)?还有其他想法吗?哦,我想用官方的python库来完成这个.所以不numpy,pandas等等,但是functools,itertools没关系
Python:将列表转换为带有异常处理的多维dict的dict键