问题描述
所以,我有这段代码,我只想在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)
连接字符串,并用逗号分隔。