如何将python字典简洁地转换为元组列表,给定一个字典,其中值可能是不同的类型?

时间:2016-05-06 13:54:33

标签: python dictionary

重要提示:如果value是一个列表,那么我希望为key, value和列表中的每个项目获取多个key元组。字典中的值将是多种类型,至少包括字符串,整数和列表。

我有一个解决方案,下面,但我想知道是否有更简洁的方法来做到这一点。

# 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')]

2 个答案:

答案 0 :(得分:3)

我喜欢列表推导以提高可读性。另外,我不明白为什么你需要一个单独的字符串和整数语句。要么你有一个清单。

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')]

答案 1 :(得分:2)

这是一个包含列表理解的简短版本:

>>> 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')]