sel*_*elf 0 python dictionary list
我正在使用python中的字典.
s = {'k1':['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg']}
Run Code Online (Sandbox Code Playgroud)
我创建的代码如下:
d = {}
for values in enumerate(s.values()[0]):
if values[0]<2:
d[values[1]] = 'True'
else:
d[values[1]] = 'False'
Run Code Online (Sandbox Code Playgroud)
我可以使用list comprehension或lambda将其转换为一个班轮代码吗?
我需要回答:
{'aa': 'True', 'bb': 'True', 'cc': 'False', 'dd': 'False', 'ee': 'False', 'ff': 'False', 'gg': 'False'}
Run Code Online (Sandbox Code Playgroud)
更新 - sry代码输入错误
回应:
d = {}
for values in enumerate(s.values()[0]):
if values[0]<2:
d['ans'] = 'True'
else:
d['ans'] = 'False'
Run Code Online (Sandbox Code Playgroud)
一个班轮是:
d = {'ans': str(len(s.values()[0]) < 2)}
Run Code Online (Sandbox Code Playgroud)
你在做什么是荒谬的.从本质上讲,你发布的代码将始终设置d['ans']到'True'时s.values()[0]具有小于的长度2(否则'False').这是因为产生的2元组中的第一个元素enumerate是索引(您要与之比较<2).对于列表长度大于2的所有情况,该else子句将继续将其设置为'False'.你甚至不需要一个循环.
更新: 对于您的新版本:
d = dict( [(val, str(index < 2)) for (index, val) in enumerate(s.values()[0])] )
Run Code Online (Sandbox Code Playgroud)
要么
d = dict( [(i , "True") for i in li[:2]] + [(i, "False") for i in li[2:]] )
Run Code Online (Sandbox Code Playgroud)
更新2:或者如果要更新现有字典:
d.update( (( (val, str(index < 2)) for (index, val) in enumerate(s.values()[0]) )) )
Run Code Online (Sandbox Code Playgroud)