[英]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.