Python中的代码优化
我正在使用python中的字典。Python中的代码优化
s = {'k1':['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg']}
我已经创建代码:
d = {}
for values in enumerate(s.values()[0]):
if values[0]<2:
d[values[1]] = 'True'
else:
d[values[1]] = 'False'
我可以转换成一个衬垫代码使用这个列表理解或lambda?
我需要的回答:
{'aa': 'True', 'bb': 'True', 'cc': 'False', 'dd': 'False', 'ee': 'False', 'ff': 'False', 'gg': 'False'}
更新 - SRY码输入错误
回应:
d = {}
for values in enumerate(s.values()[0]):
if values[0]<2:
d['ans'] = 'True'
else:
d['ans'] = 'False'
的一个内胆是:
d = {'ans': str(len(s.values()[0]) < 2)}
你在做什么是荒谬的。实质上,您发布的代码将始终将d['ans']
设置为'True'
,此时s.values()[0]
的长度小于2
(否则'False'
)。这是因为enumerate
产生的2元组中的第一个元素是索引(您正在与<2
比较)。对于列表长度大于2的所有情况,else
子句将继续将其设置为'False'
。你甚至不需要这个循环。
更新: 对于您的新版本:
d = dict([(val, str(index < 2)) for (index, val) in enumerate(s.values()[0])])
或
d = dict([(i , "True") for i in li[:2]] + [(i, "False") for i in li[2:]])
更新2:,或者如果您想更新现有的字典:
d.update((((val, str(index < 2)) for (index, val) in enumerate(s.values()[0]))))
哇,这是一个非常奇怪的代码。
让我们试着重写了一点:
d={}
for values in s['k1']:
d['ans'] = str(values[0] < 2)
我不明白这一点是:你知道,d [“答”]将是最后的比较值的价值?
而且,说实话,我真的不知道这究竟是什么意思。你能澄清一点吗?
sry码输入错误。现在更新 – self 2012-04-03 04:39:41
对于初学者来说,使用元组拆包可以让它变得更加美味。
d = {}
for index, value in enumerate(s.itervalues()[0]):
d[value] = str(index < 2)
然后可以做一个字典解析:
d = {value: str(index < 2) for index, value in enumerate(s.itervalues()[0])}
或者,换一个不同的,也许更好的方式
d = {}
for index, value in enumerate(s.itervalues()[0]):
if index < 2:
d[value] = 'True'
else:
d[value] = 'False'
随后环路内减少,
thelist = s.itervalues()[0]
d = {value: 'True' for value in thelist[:2]}
d.update((value, 'False') for value in thelist[2:])
然而,这段代码的意图令人难以理解。
这个值非常值得怀疑,因为它们的排序并不是绝对的。它最终有效地基于字典的随机元素,跨越Python实现和字典的构建顺序。
你确定这段代码正在做你想做的事吗?当我运行它时,我得到的全部是'>>> d {'ans':'False'}' – 2012-04-03 04:24:14
代码输入错误sry。其更新的 – self 2012-04-03 04:40:41
这只会存储's.values()[0]'最后一个元素的值。没有人明确指出这一点。你总是写信给'd'的'ans'键。这个密钥应该是一个列表吗?你可以 – aaronasterling 2012-04-03 04:41:15