2016-08-20 93 views
-6

我有一个列表类似下面,想转换为快译通它与dictPython的转换列表多个键值

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' 
} 
+4

看起来您希望我们为您编写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。展示这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(输出,回溯等)。您提供的细节越多,您可能会收到的答案就越多。检查[FAQ](http://stackoverflow.com/tour)和[如何提问](http://stackoverflow.com/questions/how-to-ask)。 – TigerhawkT3

+0

我试图解决它,但不断收到IndexError。 –

+0

混合类型,使用所有值的列表是一个糟糕的主意。 –

回答

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_keyNone。我会把它留给你。

+0

@cdrake谢谢你。在我的情景中工作就像一个魅力 –

2

这里是一个可能的解决方案:

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 
+1

好的尝试。但我认为你完成了反向操作:) –

+1

列表中的'dict'预计为 – Ejaz

+1

@RahulKP Lol,没错,我甚至没有读过这个问题,只是看到了一些数据,我不知道哪一个被输入或输出。我解决了这两种情况:') – BPL