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

给定一个值可能是不同类型的字典,如何将python字典简明地转换为元组列表?,python,dictionary,Python,Dictionary,重要提示:如果值是一个列表,那么我想为该键和列表中的每个项获取多个键、值元组。字典中的值将有多种类型,至少包括字符串、整数和列表 我有一个解决方案,如下,但我想知道是否有一个更简洁的方法来做到这一点 # Sample data d = {'key1': 'string1', 'key2': 15, 'key3': ['item1', 'item2', 'item3', 'item4']} # This code does what I want parameters = [

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

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

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

我喜欢列表的可读性。另外,我不明白为什么需要对字符串和int使用单独的语句。要么你有名单要么没有

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

我喜欢列表的可读性。另外,我不明白为什么需要对字符串和int使用单独的语句。要么你有名单要么没有

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

以下是一个简短的列表理解版本:

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

好的,谢谢。我明确地检查了字符串和int,只是因为我想排除其他类型,这些类型可能会给我带来奇怪的元组,我无法处理下游。好的,谢谢。我明确地检查了字符串和整数,只是因为我想排除其他可能会给我带来奇怪元组的类型,而这些元组我无法在下游处理。