将字典的值转换为字符串

时间:2020-06-28 18:07:26

标签: python string dictionary

我有一个格式为{0: [2.0,1.0], 1: [4.0,3.0], 2 [6.0,5.0]}的字典。如何有效地将其转换为{0: '2.0/1.0', 1: '4.0/3.0', 2 '6.0/5.0'}(即不使用for循环),以便将每个列表中的数字转换为其比例的字符串。谢谢!

4 个答案:

答案 0 :(得分:4)

您可以尝试使用toolz.dicttoolz

from toolz.dicttoolz import valmap
dc={0: [2.0,1.0], 1: [4.0,3.0], 2:[6.0,5.0]}
newdc=valmap(lambda x: f'{x[0]}/{x[1]}', dc)
print(newdc)

在此处查看有关valmap的有用信息:link1link2。您也可以尝试使用字典理解:

newdc={k: f"{x[0]}/{x[1]}" for k,x in dc.items()}

print(newdc)

两个输出:

{0: '2.0/1.0', 1: '4.0/3.0', 2: '6.0/5.0'}

时间:

from toolz.dicttoolz import valmap
dc={i:[2.0,1.0] for i in range(100000)}  

#Option 1#####
newdc=valmap(lambda x: f'{x[0]}/{x[1]}', dc)

#Option 2#####
newdc={}
for k,x in dc.items():
    newdc.update({k:f'{x[0]}/{x[1]}'})


#Option 3#####
newdc={k: f"{x[0]}/{x[1]}" for k,x in dc.items()}

运行10次脚本并计时您将获得的选项:

  • 选项1 0.7421236000000135
  • 选项2 0.7514457999996011
  • 选项3 0.602290400000129

因此valmap减少了时间,但不如理解词典那么重要。

修改:
经过讨论和对user120242的大量测试,我们得出的结论是,制作理解词典可能是解决问题的最佳方法。如果您有兴趣,请参阅user120242。若要查看https://pastebin.com/Zeyb28Ny用来分析时序的代码以及各种可能的解决方案,请参见此enter image description here

答案 1 :(得分:2)

似乎更容易理解列表,如果前两个始终是好的,则可以通过索引访问值

d = {0: [2.0,1.0], 1: [4.0,3.0], 2: [6.0,5.0]}
res = {k:  f"{val[0]}/{val[1]}" for k,val in d.items()}

答案 2 :(得分:1)

您可以使用比for循环更快的dict理解。

d = {0: [2.0, 1.0], 1: [4.0, 3.0], 2: [6.0, 5.0]}
d = {key: f"{value[0]}/{value[1]}" for (key, value) in d.items()}

print(d)
>>> {0: "2.0/1.0", 1: "4.0"/3.0", 2: "6.0/5.0"}

话虽如此,如果您的词典只有少量条目,您就不必担心性能。

您可以通过写入"f{value[0]: .1f}/{value[1]: .1f}"将显示的精度指定为小数点后一位。

答案 3 :(得分:0)

d1={1:12,2:34,3:45} #let this d1 be dict
for i in d1.keys:
    print(str(i),end="")