python-3.x 如何从单条目的dict中获取单个值?

wwwo4jvm  于 2023-03-31  发布在  Python
关注(0)|答案(7)|浏览(130)

我看到How to extract dictionary single key-value pair in variables建议:

d = {"a":1}
(k, v), = d.items()

但是:我只关心 value,而且我想把这个值传递给一个方法;例如:

foo(v)

所以问题是:有没有一个简单的命令可以同时适用于python 2和python3,它可以直接给我这个值,而不需要经过“tuple”赋值的弯路?
或者有没有一种方法可以让元组赋值为我调用方法的用例所用?

8fq7wneg

8fq7wneg1#

list(d.values())[0]将被计算为1。正如注解中所指出的,只有在python3中才需要转换为list
next(iter(d.values()))是另一种可能性(可能更节省内存,因为您不需要创建列表)
这两种解决方案都在本地使用python 3.6.0进行测试,并在TIO中使用python 2进行测试。

9o685dep

9o685dep2#

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
oxosxuxt

oxosxuxt3#

有没有办法让元组赋值为我的用例工作

v, *_ = d.values()

扩展解包将在Python 3中完成这项工作,如果d为空,则ValueError: Not enough values to unpack将失败。扩展解包在Python 2中不可用。

wribegjk

wribegjk4#

如果你知道密钥,那么你可以简单地做:

d["a"] 
output :
1

如果你不知道答案:

for key in d.keys():
d[key]

#so basically you have to do :

for key in d.keys():
f00(d[key])
bfnvny8b

bfnvny8b5#

使用more_itertools.one比较短,而且还验证是否存在单个条目

In [1]: from more_itertools import one
   ...: d = {"a":5}
   ...: one(d.values())
Out[1]: 5
qkf9rpyu

qkf9rpyu6#

有没有一个简单的命令可以同时适用于python2和python3,它可以直接给我这个值,而不需要经过“tuple”赋值的弯路?
使用dict.copy()(保留原始dict)和dict.popitem()函数的解决方案:

d = {"a":1}
foo(d.copy().popitem()[1])
cyvaqqii

cyvaqqii7#

对于foo(v)用例,您可以直接将值解包到调用中:

foo(*d.values())

演示:

def foo(x):
    print(x)

d = {"a": 1}

(k, v), = d.items()
foo(v)

foo(*d.values())

输出(Attempt This Online!):

1
1

相关问题