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

问题描述

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

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 )

解决方法

要执行此操作而不使用显式循环(我想说,仅将for放入列表理解语法中仍会使用for循环),则可以使用map仅获得第二个将值作为列表返回,然后将这些值与','.join()一起打印出来:

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

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

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

使用此列表作为参数调用','.join()会得到一个串联的字符串,每个字符串都用,分隔。

,

好的,这里有一些技巧:

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)连接字符串,并用逗号分隔。