gpt4 book ai didi

python - 使用 list 索引到 Python dict 中以获取列表,就像使用 Perl 哈希一样

转载 作者:太空狗 更新时间:2023-10-29 23:59:21 25 4
gpt4 key购买 nike

Perl 有一个构造(如 Joe Z 指出的那样称为“散列切片”)用于索引到带有列表的散列中以获取列表,例如:

%bleah = (1 => 'a', 2 => 'b', 3 => 'c');
print join(' ', @bleah{1, 3}), "\n";

执行给出:

a c

我知道在 Python 中处理这个问题的最简单、最易读的方法是列表理解:

>>> bleah = {1: 'a', 2: 'b', 3: 'c'}
>>> print ' '.join([bleah[n] for n in [1, 3]])
a c

因为:

>>> bleah[[1, 2]]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

我还缺少其他更好的方法吗?也许在 Python3 中,我还没有做太多?如果没有,有谁知道是否已经为此提交了 PEP?我的 google-fu 找不到。

“它不是 Pythonic”:是的,我知道,但我希望它是。它简洁易读,并且因为用不可散列类型索引到字典中永远不会是 Pythonic,所以让异常处理程序为您迭代索引而不是 barfing 不会破坏大多数当前代码.

注意:正如评论中所指出的,这个测试用例可以重写为一个列表,完全避免使用字典,但我正在寻找一个通用的解决方案。

最佳答案

我能想到的最好的方法是使用 itemgetter

from operator import itemgetter
bleah = {1: 'a', 2: 'b', 3: 'c'}
getitems = itemgetter(1, 3)
print getitems(bleah)

所以,如果你想传递一个索引列表,那么你可以像这样解压参数(感谢@koffein 指出这一点:))

getitems = itemgetter(*[1, 3])

然后你可以像这样加入

print ' '.join(getitems(bleah))

或者只是

print ' '.join(itemgetter(1, 3)(bleah))

关于python - 使用 list 索引到 Python dict 中以获取列表,就像使用 Perl 哈希一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20534686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com