簡體   English   中英

在python中將嵌套列表轉換為字典

[英]Convert nested lists to dictionary in python

我需要將嵌套列表result = [[450, 455, 458], [452, 454, 456, 457], [451, 453]]轉換為字典,如:

{
    0: 
         {
             450: None,
             455: 450,
             458: 450
         },
    1:   {
             452: None,
             454: 452,
             456: 452,
             457: 452
         },
    2:   {
             451: None,
             453: 451
         }

}

請看看這個並提供幫助:

result_group = {}
for sub_group in result:
    group_count = 0
    first_rel_item = 0
    result_group[group_count] = dict()
    for item in sub_group:
        if item == sub_group[0]:
            result_group[group_count][item] = None
            first_rel_item = item
            continue
        result_group[group_count]['item'] = first_rel_face
        group_count += 1

我搞砸了,因為我得到了關鍵錯誤:1 無法添加到字典中。

這是一種方式:

lst = [[450, 455, 458], [452, 454, 457], [451, 453]]

res = {i: {w: None if w == v[0] else v[0] for w in v}
          for i, v in enumerate(lst)}

結果

{0: {450: None, 455: 450, 458: 450},
 1: {452: None, 454: 452, 457: 452},
 2: {451: None, 453: 451}}

說明

  • 使用三元語句來確定是選擇None還是v[0]
  • 使用enumerate提取嵌套列表的索引。

試試這個:

result_group = {}
group_count = 0
for sub_group in result:
    first_rel_item = 0
    result_group[group_count] = {}
    result_group[group_count][sub_group[0]] = None
    previtem = sub_group[0]
    for item in sub_group[1:]:
        result_group[group_count][item] = previtem
    group_count += 1

你可以在這里使用列表理解:

>>> result = [[450, 455, 458], [452, 454, 457], [451, 453]]

>>> dict(enumerate({**{i: a[0] for i in a[1:]}, **{a[0]: None}}
                   for a in result))

{0: {450: None, 455: 450, 458: 450},
 1: {452: None, 454: 452, 457: 452},
 2: {451: None, 453: 451}}

注意:這使用了 Python 3.5 中引入的“擴展”可迭代解包。 z = {**x, **y}合並字典xy

每個aresult一個子列表。 您想使用a[0]作為第 1 個及以上元素的值,使用 None 作為第 0 個元素。

這里的假設是您只希望子列表的第 0 個元素具有相應的 None 值。 (如果第 0 個元素在某處重復,它將使用第 0 個元素作為其值,如@jpp 的回答。)

# the nice solutions were already given, so by foot:

d = {}
result = [[450, 455, 458], [452, 454, 457], [451, 453]]

for idx,l in enumerate(result): # returns the index and the sublists data
    rMin = min(l)
    d[idx] = {}  # create a inner dict at key idx
    for i in l:
        d[idx][i] = None if i == rMin else rMin   # fill inner dicts keys

print(d)

輸出:

{0: {450: None, 455: 450, 458: 450},
 1: {452: None, 454: 452, 457: 452},
 2: {451: None, 453: 451}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM