簡體   English   中英

如何將列表元素轉換為字典/元組? Python

[英]How to transform elements of list into dict/tuple? Python

我需要轉換這個列表:

[124, '-9.6713520', '-35.745578', 132, '-9.6713765', '-35.745620', 140, '-9.6712351', '-35.745561', 159, '-9.6712457', '-35.745545']

進入:

[{'uc': 124, 'location': (-9.6713520, -35.745578)}, 
{'uc': 132, 'location': (-9.6713765, -35.745620)},
{'uc': 140, 'location': (-9.6712351, -35.745561)},
{'uc': 159, 'location': (-9.6712457, -35.745545)}]

有沒有辦法做到這一點?

如果你從你的列表中創建一個迭代器,你可以將它自身壓縮三次,以三元組進行迭代:

l = [124, '-9.6713520', '-35.745578', 132, '-9.6713765', '-35.745620', 140, '-9.6712351', '-35.745561', 159, '-9.6712457', '-35.745545']

it = iter(l)   
[{'uc': k, 'location': (float(a), float(b))} for k, a, b in zip(it, it, it)]

給你:

[{'uc': 124, 'location': (-9.671352, -35.745578)},
 {'uc': 132, 'location': (-9.6713765, -35.74562)},
 {'uc': 140, 'location': (-9.6712351, -35.745561)},
 {'uc': 159, 'location': (-9.6712457, -35.745545)}]

您可以只使用一個簡單for循環並遍歷列表中的每 3 個項目:

orig = [124, '-9.6713520', '-35.745578', 132, '-9.6713765', '-35.745620', 140, '-9.6712351', '-35.745561', 159, '-9.6712457', '-35.745545']
final = []
for i in range(0, len(orig), 3): # Note the 3 as that is the step
    new = {}
    new["uc"] = orig[i]
    new["location"] = (orig[i + 1], orig[i + 2])
    final.append(new)
print(final)

輸出:

[{'uc': 124, 'location': ('-9.6713520', '-35.745578')}, {'uc': 132, 'location': ('-9.6713765', '-35.745620')}, { 'uc': 140, '位置': ('-9.6712351', '-35.745561')}, {'uc': 159, '位置': ('-9.6712457', '-35.745545')}]

或使用列表理解:

[{"uc": orig[i], "location": (orig[i + 1], orig[i + 2])} for i in range(0, len(orig), 3)]

因此,您需要將數據字典附加到一個新列表中,這可以通過在您獲得的列表中循環來完成,並且由於您想要新的三的倍數,我們可以編寫循環以每次跳轉 3 個索引,然后添加到只需一行代碼即可生成新列表。

my_list = [124, '-9.6713520', '-35.745578', 132, '-9.6713765', '-35.745620', 140, '-9.6712351', '-35.745561', 159, '-9.6712457', '-35.745545']
new_list = []
steps = 3

for i in range(0, len(my_list), steps):
  new_list.append({'uc': my_list[i], 'location': (my_list[i+1], my_list[i+2])})

print(new_list)

使用像 Mark 這樣的迭代器的更多變體,但也使用map來浮動( 在線嘗試! ):

it = iter(l)   
ft = map(float, it)
result = [{'uc': uc, 'location': location}
          for uc, location in zip(it, zip(ft, ft))]
it = iter(l)   
ft = map(float, it)
keys = 'uc', 'location'
result = [dict(zip(keys, values))
          for values in zip(it, zip(ft, ft))]
from itertools import repeat
it = iter(l)   
ft = map(float, it)
result = list(map(dict, map(zip, repeat(['uc', 'location']), zip(it, zip(ft, ft)))))

暫無
暫無

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

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