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将列表转换为具有多个键值的字典[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将标准 python 键值字典列表转换为 pyspark 数据框

python pandas将数据框转换为具有多个值的字典

每个键有多个值的列表到字典转换?

将数据框转换为具有多个值的字典

Python:总结具有不同键和相同值的字典列表

如何连接具有相同键值python的字典列表