Python将列表转换为具有多个键值的字典[关闭]
Posted
技术标签:
【中文标题】Python将列表转换为具有多个键值的字典[关闭]【英文标题】:Python convert list to dict with multiple key value [closed] 【发布时间】:2016-12-27 11:13:27 【问题描述】:我有一个类似下面的列表,想把它转换成字典
my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2', 'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6']
如何将上面的列表转换为如下所示的 dict
my_dict =
'key1': 'value1',
'key2': 'value2',
'key3': ['value3-1', 'value3-2', 'value3-3'],
'key4': 'value4',
'key5': ['value5', 'value5-1', 'value5-2'],
'key6': 'value6'
【问题讨论】:
您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQ 和How to Ask。 我试图解决它,但一直收到 IndexError。 混合类型是个糟糕的主意,对所有值使用列表。 【参考方案1】:这是一个可能的解决方案:
from collections import defaultdict
import pprint
my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2',
'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6']
my_dict = defaultdict(list)
current_key = None
for item in my_list:
if '=' in item:
current_key, value = item.split('=')
my_dict[current_key].append(value)
my_dict = k: v[0] if len(v) == 1 else v for k, v in my_dict.iteritems()
pprint.pprint(my_dict)
出于好奇,如果您的输入是字典,那么获取列表将是微不足道的:
from collections import defaultdict
my_dict =
'key1': 'value1',
'key2': 'value2',
'key3': ['value3-1', 'value3-2', 'value3-3'],
'key4': 'value4',
'key5': ['value5', 'value5-1', 'value5-2'],
'key6': 'value6'
output = ["0=1".format(k, ', '.join(v) if type(v) is list else v)
for k, v in my_dict.iteritems()]
print output
【讨论】:
很好的尝试。但我认为你做了相反的事情:) 预计dict
来自list
@RahulKP 大声笑,没错,我什至没有阅读问题,只是看到一些数据,我不知道哪个是输入或输出。我已经解决了这两种情况:')
为您的两次尝试 +1。【参考方案2】:
有几种方法可以做到这一点,这是一种: 编辑:我的第一个解决方案为每个值提供了一个列表,但是当一个键有多个值时,您只需要一个列表。
my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2', 'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6']
my_dict =
current_key = None
for item in my_list:
if '=' in item:
current_key, value = item.split('=')
# This puts a string as the value
my_dict[current_key] = value
else:
# Check if the value is already a list
if not isinstance(my_dict[current_key], list):
# If value is not a list, create one
my_dict[current_key] = [my_dict[current_key]]
my_dict[current_key].append(item)
import pprint
pprint.pprint(my_dict)
给予:
'key1': 'value1',
'key2': 'value2',
'key3': ['value3-1', 'value3-2', 'value3-3'],
'key4': 'value4',
'key5': ['value5', 'value5-1', 'value5-2'],
'key6': 'value6'
您可能希望通过检查 current_key
是否为 None
来使其更加健壮。我会把它留给你。
【讨论】:
@cdrake 谢谢。在我的场景中像魅力一样工作以上是关于Python将列表转换为具有多个键值的字典[关闭]的主要内容,如果未能解决你的问题,请参考以下文章