簡體   English   中英

給定一個字典,其中值可能是不同的類型,如何將python字典簡潔地轉換為元組列表?

[英]How do I concisely convert a python dictionary to a list of tuples, given a dictionary in which the values may be different types?

重要提示:如果該value是一個列表,則我想獲取多個key, valuekey和列表中每個項目的key, value元組。 字典中的值將具有多種類型,至少包括字符串,整數和列表。

我在下面有一個解決方案,但是我想知道是否有更簡潔的方法可以做到這一點。

# Sample data
d = {'key1': 'string1', 
    'key2': 15, 
    'key3': ['item1', 'item2', 'item3', 'item4']}

# This code does what I want
parameters = []
for k, v in d.iteritems():
    if isinstance(v, str):
        parameters.append((k ,v))
    elif isinstance(v, int):
        parameters.append((k, v))
    elif isinstance(v, list):
        for x,y in zip(itertools.repeat(k), v):
            parameters.append((x, y))
    else:
        continue

parameters
# [('key1', 'string1'),
#  ('key2', 15),
#  ('key3', 'item1'),
#  ('key3', 'item2'),
#  ('key3', 'item3'),
#  ('key3', 'item4')]

我喜歡列表理解以提高可讀性。 另外,我看不到為什么需要為字符串和整數編寫單獨的語句。 您是否有列表。

parameters = []
for k, v in d.iteritems():
  if isinstance(v, list):
    parameters.extend([(k, i) for i in v])
  else:
    parameters.append((k, v))

結果:

>>> parameters
[('key3', 'item1'), ('key3', 'item2'), ('key3', 'item3'), ('key3', 'item4'), ('key2', 15), ('key1', 'string1')]

這是列表理解的簡短版本:

>>> d = {'key1': 'string1', 'key2': 15, 'key3': ['item1', 'item2', 'item3', 'item4']}
>>> parameters = [(k, v1) for k, v in d.iteritems() for v1 in (v if isinstance(v, list) else [v])]
>>> parameters
[('key3', 'item1'), ('key3', 'item2'), ('key3', 'item3'), ('key3', 'item4'), ('key2', 15), ('key1', 'string1')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM