将列表的子列表转换为字典

时间:2017-10-07 19:08:24

标签: python python-3.x dictionary

所以我想知道是否有可能将列表的子列表放入字典中。

例如,列表包含:

 cy = [["a", "b", "a"], ["a", "b", "c", "d", "a"], ["c", "b", "a", "c"], ["d, "b", "a", "d"]]

将根据子列表的第一个字母

存储到字典中
 {a : ["a", "b", "a"], c : ["c", "b", "a", "c"], d: ["d, "b", "a", "d"] }

请注意,它只存储以" a"开头的密钥的第一个子列表。而不是下一个。

我的代码如下:

def syn(graph,start): 
     empty = []

     cy = [["a", "b", "a"], ["a", "b", "c", "d", "a"], ["c", "b", "a", "c"], ["d, "b", "a", "d"]]

     lei = dict()
     for items in cy:
        if items[0] in lei:
            lei[items[0]] += items

        else:
             lei[items[0]] = items
        return lei

但我得到的只是

  {a : ["a", "b", "a"]}

有什么方法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

简单dict理解:

cy = [["a", "b", "a"], ["a", "b", "c", "d", "a"], ["c", "b", "a", "c"], ["d", "b", "a", "d"]]
result = {l[0]: l[:] for l in cy[::-1]}

print(result)

输出:

{'a': ['a', 'b', 'a'], 'c': ['c', 'b', 'a', 'c'], 'd': ['d', 'b', 'a', 'd']}
  • cy[::-1] - 以相反的顺序处理输入列表,以防止重叠 next "键"

答案 1 :(得分:0)

最直接的方法是迭代列表向后,根据第一个元素将列表添加到dict。由于您向后退,这可以保证第一个子列表将成为您dict中包含的列表:

>>> result = {}
>>> for sub in reversed(cy):
...     result[sub[0]] = sub
...
>>> result
{'d': ['d', 'b', 'a', 'd'], 'a': ['a', 'b', 'a'], 'c': ['c', 'b', 'a', 'c']}
>>>

所以,你会保持最后遇到的值,但是反向顺序列表的最后一个值是正向顺序的第一个值!

答案 2 :(得分:0)

虽然你可以非常巧妙地向后迭代,正如@ juanpa.arrivillaga和@RomanPerekhrest解决方案所示,另一种方法是简单地遍历列表并使用any函数:

cy = [["a", "b", "a"], ["a", "b", "c", "d", "a"], ["c", "b", "a", "c"], ["d", "b", "a", "d"]]
new_list = []
for i in cy:
   if not any(i[0] == b[0] for b in new_list):
       new_list.append(i)

final_dict = {i[0]:i for i in new_list}

输出:

{'a': ['a', 'b', 'a'], 'c': ['c', 'b', 'a', 'c'], 'd': ['d', 'b', 'a', 'd']}

答案 3 :(得分:0)

使用pandas:

import pandas as pd

cy = [["a", "b", "a"], ["a", "b", "c", "d", "a"], ["c", "b", "a", "c"], ["d", "b", "a", "d"]]

# create a df
df = pd.DataFrame([[i] for i in cy],[i[0] for i in cy])

# export it in reverse order
df.iloc[::-1].T.to_dict(orient='rows')[0]

返回:

{'a': ['a', 'b', 'a'], 'c': ['c', 'b', 'a', 'c'], 'd': ['d', 'b', 'a', 'd']}