重要提示:如果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')]
答案 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')]