我有以下輸入:
test = [{1:"i am Mike"},{3:"i am 20 years old"},{1:"i live in greece"},{7:"i love pizza"},{9:"i love basketball"}]
我想找到每個鍵的第一次和最后一次出現,然后我想對第一次和最后一次出現之間的所有資訊進行分組,更具體地說是字串。我想要以下輸出:
test = [{1:"i am Mike i am 20 years old i live in greece"},{7:"i love pizza"},{9:"i love basketball"}]
uj5u.com熱心網友回復:
像這樣的東西:
test = [{1:"i am Mike"},{3:"i am 20 years old"},{1:"i live in greece"},{7:"i love pizza"},{9:"i love basketball"}]
result = {}
for dic in test:
for k,v in dic.items():
result[k] = result.get(k, '') v ','
print(result)
輸出:
>>>
{1: 'i am Mike,i live in greece,', 3: 'i am 20 years old,', 7: 'i love pizza,', 9: 'i love basketball,'}
uj5u.com熱心網友回復:
沒有圖書館或任何花哨的方法:
test = [{1: "i am Mike"}, {3: "i am 20 years old"}, {1: "i live in greece"}, {7: "i love pizza"},
{9: "i love basketball"}]
tracking = []
output_str = []
result = []
for d in test:
key, value = tuple(d.items())[0]
output_str.append(value)
if key in tracking:
start = tracking.index(key)
result = [{k: v} for (k, v) in zip(tracking[:start], output_str[:start])]
tracking = tracking[start:]
output_str = output_str[start:]
result.append({key: ''.join(output_str)})
tracking.clear()
output_str.clear()
else:
tracking.append(key)
result = [{k: v} for (k, v) in zip(tracking, output_str)]
print(result)
這不支持 1 2 2 4 1 它只會合并 2 2
uj5u.com熱心網友回復:
首先將開始和結束索引與單獨字典中的每個鍵相關聯。然后將這些組合成不重疊的范圍,標識每個范圍的第一個鍵。最后從每個范圍內的字典中提取字串:
starts = { k:len(test)-i for i,d in enumerate(reversed(test),1) for k in d }
ends = { k:i for i,d in enumerate(test,1) for k in d }
ranges = [(0,)]
ranges.extend( (k,starts[k],ends[k]) for i,d in enumerate(test)
for k in d if i==ranges[-1][-1] )
merged = [ {g:" ".join(d[k] for d in test[s:e] for k in d)}
for g,s,e in ranges[1:] ]
輸出:
print(merged)
[{1: 'i am Mike i am 20 years old i live in greece'},
{7: 'i love pizza'},
{9: 'i love basketball'}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420053.html
標籤:
