Python将列表转换为具有多个键值的dict
我有一个类似下面的列表,想把它转换成dictPython将列表转换为具有多个键值的dict,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我有一个类似下面的列表,想把它转换成dict 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 = { 'key1': 'value1', 'key2': 'value2',
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 = {
'key1': 'value1',
'key2': 'value2',
'key3': ['value3-1', 'value3-2', 'value3-3'],
'key4': 'value4',
'key5': ['value5', 'value5-1', 'value5-2'],
'key6': 'value6'
}
下面是一个可能的解决方案:
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
有几种方法可以做到这一点,这是一种: 编辑:我的第一个解决方案为每个值提供了一个列表,但您只需要在一个键有多个值时才需要一个列表
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\u key
是否为None
使其更加健壮。我将把它留给您。看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(输出、回溯等)。你提供的细节越多,你可能得到的答案就越多。检查and。我试图解决它,但一直得到Indexer。混合类型,使用列表表示所有值是一个糟糕的主意。很好的尝试。但我认为你做的正好相反:)一个列表中的dict
是expected@RahulKP哈哈,没错,我甚至没有读过这个问题,只是看到了一些数据,我不知道哪一个是输入还是输出。两种情况我都解决了:')两次尝试+1。@C谢谢。在我的场景中,它就像一个魔咒