列表說我有一個列表保存下列項目:從字符串的字典
["FOO x 2", "BAR x 11", "PERC"]
我想這個列表轉換結果如下的字典:
{"FOO": 2, "BAR": 11, "PERC": 1}
關於如何解決這個問題的任何想法?
列表說我有一個列表保存下列項目:從字符串的字典
["FOO x 2", "BAR x 11", "PERC"]
我想這個列表轉換結果如下的字典:
{"FOO": 2, "BAR": 11, "PERC": 1}
關於如何解決這個問題的任何想法?
您可以用提供一個理解到dict
去:
l = ["FOO x 2", "BAR x 11", "PERC"]
d = dict((tuple(map(str.strip, i.split('x'))) if 'x' in i else (i, 1) for i in l))
print(d)
{'BAR': '11', 'FOO': '2', 'PERC': 1}
雖然是for-loop
絕對勝過它的可讀性:
d = {}
for i in l:
if 'x' in i:
k, v = map(str.strip, i.split('x'))
d[k] = v
else:
d[i] = 1
一個班輪:
d = {x[0].strip(): int(x[1]) for x in ((elm + 'x 1').split('x') for elm in lst)}
print(d)
輸出:
{'BAR': 11, 'FOO': 2, 'PERC': 1}
或者,也可以在Python 3利用新的拆包特徵與*
:
lst = ["FOO x 2", "BAR x 11", "PERC"]
res = {}
for x in lst:
name, *count = (x + 'x 1').split('x')
res[name.strip()] = int(count[0])
print(res)
輸出: { 'BAR':11, 'FOO':2 'PERC':1 }
下面代碼片段可以做你想做的事
lst = ["FOO x 2", "BAR x 11", "PERC"];
lst1 = list()
for elem in lst:
splited = elem.split('x')
k = 0
for stri in splited:
k = k + 1
if k == 1:
v = stri
u = 1
else:
u = stri
ar = list()
ar.append(v)
ar.append(u)
lst1.append(ar)
dic = dict(lst1)
print(dic)
一個更的contrib動物園什麼:現在列表解析,分割和if
表達:
pass1 = [x.split(' x ') for x in l]
# [['FOO', '2'], ['BAR', '11'], ['PERC']]
dict((t[0], int(t[1]) if len(t) > 1 else 1) for t in pass1)
# {'PERC': 1, 'BAR': 11, 'FOO': 2}
夫婦的選項可供選擇
data = ["FOO x 2", "BAR x 11", "PERC"]
res = { key : int(value) if value else 1
for key, sep, value in map(lambda s: s.partition(' x '), data) }
res = {}
for item in data:
key, sep, value = item.partition(' x ')
res[key] = int(value) if value else 1
res = {}
for item in data:
key, *value = item.split(' x ')
res[key] = int(value[0]) if value else 1
res = {}
for item in data:
key, value = (item.split(' x ') + [1])[:2]
res[key] = int(value)
# Output - res
{'FOO': 2, 'BAR': 11, 'PERC': 1}
注意,這是假設你的數據總是會在該格式,否則可能需要包括.strip()
或其他小的改動。
爲什麼'PERC'的值是'1'? –
@ JimFasarakis-Hilliard如果旁邊沒有乘法器,*假設*爲「x 1」。 – Josh