如何在Python 3中统一转换字典列表值?

时间:2016-09-21 16:49:14

标签: python python-3.x refactoring

我有一个yaml文件,其中包含几个列表字段。

它看起来像这样:

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中如何做到这一点。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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