我有一个列表字典,我想为特定列表添加一个值...
d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}
我想将数字2添加到只有一个长度最小的列表中。
def gsl(x):
return [k for k in x.keys() if len(x.get(k))==min([len(n) for n in x.values()])]
之后
>>> gsl(d)
['e', 'g', 'f']
因此,在这种情况下,我想将数字2附加到字典'e'
中,使其成为[4,2]
(顺序无关紧要。
结果应为
>>> d['e']
[4,2]
我试过
for i in d:
if gsl(d)[0] == i: #gets the first key with the smallest value
d[i].append(2) # if equal, adds 2 to the dictionary value that matches
除了为2
,'e'
,'g'
添加'f'
之外。
提前致谢!
答案 0 :(得分:4)
>>> d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}
>>> smallest = min(d, key=lambda k: len(d[k]))
>>> d[smallest].append(2)
>>> d
{'a': [4, 2], 'c': [4, 3], 'b': [3, 4], 'e': [4, 2], 'd': [4, 3], 'g': [4], 'f': [4]}
答案 1 :(得分:0)
怎么样:
d[gsl(d)[0]].append(2)
gsl(d)
获取最小长度的密钥列表,0
获取第一个密钥,然后我们获取该密钥的列表并将2
附加到其中。
答案 2 :(得分:0)
你的答案的问题在于,在'e'中插入元素后,它不再是“具有最小长度列表的键”的一部分,因此在下一次迭代中它将返回['f','g “]。
一个快速解决方法是打破循环,如下所示:
for i in d:
if gsl(d)[0] == i:
d[i].append(2)
break
但这是一种非常低效的方式来做你想做的事情,如果d为空则会失败。
答案 3 :(得分:0)
如果您使用的是python 2.7或更新版本,则可以使用view:
>>> d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}
>>> min(d.viewitems(), key=lambda (k, v): len(v))[1].append(2)
>>> d
{'a': [4, 2], 'c': [4, 3], 'b': [3, 4], 'e': [4, 2], 'd': [4, 3], 'g': [4], 'f': [4]}
如果您使用的是旧版本,则可以使用iteritems:
>>> d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}
>>> min(d.iteritems(), key=lambda (k, v): len(v))[1].append(2)
>>> d
{'a': [4, 2], 'c': [4, 3], 'b': [3, 4], 'e': [4, 2], 'd': [4, 3], 'g': [4], 'f': [4]}