Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将列表转换为具有多个键值的dict_Python_Python 2.7_Dictionary - Fatal编程技术网

Python将列表转换为具有多个键值的dict

Python将列表转换为具有多个键值的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',

我有一个类似下面的列表,想把它转换成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',
  '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谢谢。在我的场景中,它就像一个魔咒