2016-09-21 62 views
1

我有一个yaml文件,有几个字段是列表。如何在Python 3中统一转换字典列表值?

它看起来有点像这样:

key0: "value0" 
key1: ["value1-0", "value1-1", "value1-2"] 
key2: ["value2-0", "value2-1", "value2-2"] 
key3: "value3" 

这是自然转化为与PyYAML库Python字典。

最后,我想一起捣烂键和值的字符串如下:

--key0 value0 --key1 value1-0 --key1 value1-1 --key1 value1-2 ... --key3 value3

我想出了一个解决方案,它依赖于我处理名单,但一些事实错误地让我想知道是否有更干净,通用和优雅的方式?

UPD:@senchuk答案后,我希望让自己多一点清楚。

这个问题不是关于任何解决方案。对于那些比Python更有经验的人来说,这仅仅是一个基于观点的问题。我经常听到这种“pythonic”的方式。这是我正在寻找的!有时髦功能的东西可以做。对数据转换没有任何限制。如果最好的方法是将所有标量值转换为列表,然后将所有内容都转换为字符串,那就这样做。我很好奇现在的Python如何做到这一点。

+0

什么都尝试过哟?请与我们分享您的代码或您所做的任何尝试 –

+0

我做了与@senchuk的解决方案非常相似的内容。我在这里问一个经验丰富的Python开发人员会选择的方式。 – staroselskii

回答

0

你可以通过字典迭代建立一个字符串的内容。如果该项目是一个列表,则必须遍历其元素。

注:由于字典是无序集合,因此输出可能会有所不同。

dict={"key0": "value0", "key1": ["value1-0", "value1-1", "value1-2"], "key2": ["value2-0", "value2-1", "value2-2"], "key3": "value3"} 

s = '' 
for k,v in dict.items(): 
    print(k, v) 
    if type(v) is list: 
     for elem in v: 
      s+= '--' + k + ' ' + str(elem) + ' ' 
    else: 
     s+= '--' + k + ' ' + str(v) + ' ' 

print(s) 

>>> --key1 value1-0 --key1 value1-1 --key1 value1-2 --key0 value0 --key3 value3 --key2 value2-0 --key2 value2-1 --key2 value2-2 
+0

这与我写的代码几乎没有什么不同。我在想更多的“pythonic”。这个'''''''东西让我烦恼。因此,这个问题实际上是。 – staroselskii

+0

我将其标记为答案,因为不幸我还没有想出更好的方法。 – staroselskii

0

如果你已经拥有的东西,转换你有什么成一个字典,那么这应该做你想要

d = {'key1' : 'value1', 'key2' : 'value2'} 
stringFinal = '' 
tempString = '' 
for k, v in d.items(): 
    tempString = str(k) + ' ' + str(v) 
    stringFinal ='--' + tempString + ' ' + stringFinal 
    tempString = '' 
print(stringFinal) 
+0

对不起,但这不起作用!看看@chenchuk的答案。虽然他/她的回答并不完全是我要找的,但它的工作原理。 – staroselskii

+0

对不起!我没有意识到你的字典中有值列表,我以为你只是处理字符串值。是chenchuks解决方案的作品,你可以更具体,因为你的意思pythonic?如更高效??我很感谢你的回应! – BLang

+0

没关系!我在想列表解析,itertools等等。我并不是想通常过分复杂。但是当我输入'''的时候,如果type(v)是list'''我想没关系,还有另一个更清晰的解决方案。通常我会找到一个自己,但是这次我尝试了一个小时而无济于事。我提出的所有解决方案都在减轻我处理列表的事实。 – staroselskii