将python字典转换为逗号分隔的键字符串和逗号分隔值字符串的优雅方法是什么?

时间:2015-05-04 07:23:37

标签: python string function dictionary

我有一本字典如下: -

dict={'a':'1','b':'2', 'c':'3'}

要将其转换为逗号分隔的键字符串key_string和逗号分隔值字符串val_string,请执行以下操作: -

key_list=[]
val_list=[]

 for key,value in dict.iteritems():
     key_list.append(key)
     val_list.append(value)

 key_string = ','.join(key_list)
 val_string = ','.join(val_list)

结果是

 key_string = "a,b,c"
 val_string = "1,2,3" 

有更高效/优雅的方法吗?

4 个答案:

答案 0 :(得分:8)

使用str.join(iterable)(提示:不要命名你的词典dict):

d = {'a':'1', 'b':'2', 'c':'3'}
print(",".join(d.keys()))
print(",".join(d.values()))

输出:

c,a,b
3,1,2

请注意,字典没有订单。所以输出也没有你可以依赖的任何顺序。

答案 1 :(得分:6)

显而易见的解决方案是使用iterkeysitervalues代替iteritems

key_string = ','.join(d.iterkeys())
val_string = ','.join(d.itervalues())

如果您担心不同顺序中显示的键和值,而Python允许dicts以他们想要的任何顺序进行迭代,那么它会记录here,如果您反复迭代它们在你之间做任何其他事情都会得到相同的订单:

  

如果items()keys()values()iteritems()iterkeys()itervalues()被调用而没有对字典进行干预,列表将直接对应。

(2.7文档从未更新过,但viewitemsviewkeysviewvalues也是如此。)

至少在CPython中,使用keysvalues代替iterkeysitervalues可能会稍微高效一些(因为,当给定迭代器时, CPython str.join的实现只是列出了一个列表,但我怀疑这很重要。正如Padraic Cunningham在评论中指出的那样,对于键(但不是值),您可以仅使用list(d)而不是d.keys()更快地获得相同的列表(尽管可能不是 - {避免LOAD_ATTR来电,但代价是LOAD_NAME,除非您先将list复制到本地,因此可以LOAD_FAST。< / p>

最后,如果您想使用iteritems(请假设您使用的是每次随机化迭代顺序的破解的不完全兼容的Python解释器),您可以使用zip

keys, values = zip(*d.iteritems())

将一对序列转换为一对序列。

答案 2 :(得分:1)

你可以这样做:

key_string = ','.join(dict.keys()) 
val_string = ','.join(dict.values())

答案 3 :(得分:0)

使用相同的功能str.join(iterable),如果字典值不是全部字符串,则使用list-comprehension shorthand

d = {'a': '1', 'b': 2, 'c': {'d': 3}, 'e': [4,5,6]}
print(",".join(d.keys()))
print(",".join([str(e) for e in d.values()]))

输出:

a,b,c,e
1,2,{'d': 3},[4, 5, 6]

如果要自定义格式,则可以使用优雅的抽象。将str(e)替换为您的自定义格式化程序myFormatter(e)