Gho*_*ica 6 python dictionary python-3.x
我看到如何在变量中提取字典单键值对建议:
d = {"a":1}
(k, v), = d.items()
Run Code Online (Sandbox Code Playgroud)
但是:我只关心价值.我想把这个值传递给一个方法; 喜欢:
foo(v)
Run Code Online (Sandbox Code Playgroud)
所以问题是:是否有一个简单的命令适用于python2和python3,直接给我这个值,而没有绕过"元组"赋值?
或者有没有办法让元组赋值适用于我调用方法的用法?
list(d.values())[0]
将被评估为1.正如评论中所指出的,list
仅在python3中需要强制转换.
next(iter(d.values()))
是另一种可能性(可能更有内存效率,因为您不需要创建列表)
这两个解决方案都在本地使用python 3.6.0进行测试,在TIO中使用python 2进行测试.
next(iter(d.values()))
是从字典中提取唯一值的自然方式。list
无需转换为仅提取唯一元素。
它还在可用选项中表现最佳(在 Python 3.6 上测试):
d = [{'a': i} for i in range(100000)]
%timeit [next(iter(i.values())) for i in d] # 50.1 ms per loop
%timeit [list(i.values())[0] for i in d] # 54.8 ms per loop
%timeit [list(i.values()).pop() for i in d] # 81.8 ms per loop
Run Code Online (Sandbox Code Playgroud)
有没有办法让元组分配适合我的用例
v, *_ = d.values()
Run Code Online (Sandbox Code Playgroud)
扩展解包将在 Python 3 中完成这项工作,但会因ValueError: Not enough values to unpack
ifd
为空而失败。Python 2 中不提供扩展解包。
使用more_itertools.one
很短,并且还验证是否有一个条目
In [1]: from more_itertools import one
...: d = {"a":5}
...: one(d.values())
Out[1]: 5
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12166 次 |
最近记录: |