如何仅在 OrderedDict 的每个键中提取第二个值元素?

How to extract second values elements only in every keys in an OrderedDict?

所以,我有这段代码,我只想提取 OrderedDict 中每个键中的第二个值元素,我不想使用 for 循环,对此有什么想法吗?

from collections import OrderedDict

regDict= OrderedDict()
regDict["glenn"] = (100,200)
regDict["elena"] = (10,20)
print("values",list(regDict.values())[0][1])
print("values",list(regDict.values())[1][1])

打印:

values 200
values 20

目标输出:

values 200,20    # or values ( 200,20 )

好的,这里有一些技巧:

from collections import OrderedDict
regDict= OrderedDict()
regDict["glenn"] = (100,200)
regDict["elena"] = (10,20)
print("values",list(regDict.values())[0][1])
print("values",list(regDict.values())[1][1])
second_vals = [str(val[1]) for val in regDict.values()] # Creates a list ['200', '20']
second_vals_as_str = ", ".join(second_vals)
print (f'values: {second_vals_as_str}') # Prints <values: 200, 20>

你需要 [str(val[1]) for val in regDict.values()] 来进行列表理解,它只需要第二个数字([1])并将其转换为字符串(str)。

", ".join(second_vals)连接字符串,以逗号分隔。

要在不使用显式循环的情况下做到这一点(我会说只是将 for 放在列表理解语法中仍然使用 for 循环),您可以使用 map 来只获得第二个值作为列表返回,然后将这些值与 ','.join() 一起打印出来:

>>> ','.join(map(lambda x: str(x[1]), regDict.values()))
'200,20'

map 调用使用 lambda 函数 return 每个原始值的第二个值 ([1]):

>>> list(map(lambda x: str(x[1]), regDict.values()))
['200', '20']

使用此列表作为参数调用 ','.join() 会返回一个连接的字符串,每个值由 , 分隔。