我有一本字典:
names = ['arun', 'vinod', 'karthik', 'sita', 'ramu', 'arvind', 'abinav', 'malu', 'prakash']
我希望結果為:
{4: ['arun', 'sita', 'ramu', 'malu'], 5: ['vinod'], 6: ['arvind', 'abinav'], 7: ['karthik', 'prakash']}
我嘗試使用:
names = ['arun', 'vinod', 'karthik', 'sita', 'ramu', 'arvind', 'abinav', 'malu', 'prakash']
f = {}
for str in names:
if str in f:
f[str] = len(str)
else:
f[str] = len(str)
new_dict = {}
for key, value in f.items():
if value in new_dict:
new_dict[value].append(key)
else:
new_dict[value]=[key]
print(new_dict)
我得到的解決方案是:
{4: ['arun', 'sita', 'ramu', 'malu'], 5: ['vinod'], 7: ['karthik', 'prakash'], 6: ['arvind', 'abinav']}
對此有何改進或更快的方法?
uj5u.com熱心網友回復:
Defaultdict 非常適合這樣的任務。
代碼示例:
from collections import defaultdict
names = ['arun', 'vinod', 'karthik', 'sita', 'ramu', 'arvind', 'abinav', 'malu', 'prakash']
result = defaultdict(list)
for name in names:
result[len(name)].append(name)
normal_dict = dict(result)
print(normal_dict)
輸出:
{4: ['arun', 'sita', 'ramu', 'malu'], 5: ['vinod'], 7: ['karthik', 'prakash'], 6: ['arvind', 'abinav']}
uj5u.com熱心網友回復:
你可以這樣寫:
dict={}
for i in names:
if len(i) in dict.keys():
dict[len(i)].append(i)
else:
dict[len(i)]=[i]
輸出:
{4: ['arun', 'sita', 'ramu', 'malu'],
5: ['vinod'],
7: ['karthik', 'prakash'],
6: ['arvind', 'abinav']}
uj5u.com熱心網友回復:
你也可以寫:
names = ['arun', 'vinod', 'karthik', 'sita', 'ramu', 'arvind', 'abinav', 'malu', 'prakash']
f = {}
for name,l in list(map(lambda name: (name, len(name)), names)):
f[l] = f.get(l, []) [name]
輸出
{4: ['arun', 'sita', 'ramu', 'malu'],
5: ['vinod'],
7: ['karthik', 'prakash'],
6: ['arvind', 'abinav']}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/414402.html
標籤:
上一篇:將資料框轉換為列出并洗掉NaN值
