如何通过单一条目从dict获取单个值?

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,直接给我这个值,而没有绕过"元组"赋值?

或者有没有办法让元组赋值适用于我调用方法的用法?

B. *_*eri 9

list(d.values())[0]将被评估为1.正如评论中所指出的,list仅在python3中需要强制转换.

next(iter(d.values())) 是另一种可能性(可能更有内存效率,因为您不需要创建列表)

这两个解决方案都在本地使用python 3.6.0进行测试,在TIO中使用python 2进行测试.

  • @WiriyaRungruang你是对的......在python 2上。在python 3.6.0上,它显示`<class 'dict_values'>`。 (2认同)

jpp*_*jpp 9

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)


Chr*_*efe 6

有没有办法让元组分配适合我的用例

v, *_ = d.values()
Run Code Online (Sandbox Code Playgroud)

扩展解包将在 Python 3 中完成这项工作,但会因ValueError: Not enough values to unpackifd为空而失败。Python 2 中不提供扩展解包。


Alo*_*nme 5

使用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)