我有一个Python字典将字符串映射到字符串列表。
E.g。对于这个例子
dd = {'cc': ['aa', 'UU', 'zzzzzzz'], 't': ['aa', 'uu', 'ZZZZZZ']}
我想要这个:
{'cc': ['aa', 'UU', 'ZZZZZZZ'], 't': ['aa', 'uu', 'ZZZZZZ']} # note the last item in the first list
我以为我可以通过索引重新分配最后一项,并尝试使用此
的变体{k: (v[-1] = v[-1].upper()) for k,v in dd.viewitems()}
# --> returns syntax error
# or this, which returns None:
{k: v[:-1].append(v[-1].upper()) for k,v in dd.viewitems()}
#the below works but I don't like it
{k: [i if not v.index(i) == len(v)-1 else i.upper() for i in v] for k,v in dd.viewitems()}
我无法使用脏列表理解工作。
(虽然我没有自己的过错,但我在Py 2上)
谢谢!
答案 0 :(得分:4)
使用简单的for
循环:
dd = {'cc': ['aa', 'UU', 'zzzzzzz'], 't': ['aa', 'uu', 'ZZZZZZ']}
for v in dd.itervalues():
v[-1] = v[-1].upper()
print dd
{'cc': ['aa', 'UU', 'ZZZZZZZ'],
't': ['aa', 'uu', 'ZZZZZZ']}
词典理解不能包含作业,因此不适合您尝试应用的逻辑。
答案 1 :(得分:1)
您可以使用解包:
dd = {'cc': ['aa', 'UU', 'zzzzzzz'], 't': ['aa', 'uu', 'ZZZZZZ']}
new_d = {a:[c, d, e.upper()] for a, [c, d, e] in dd.items()}
输出:
{'cc': ['aa', 'UU', 'ZZZZZZZ'], 't': ['aa', 'uu', 'ZZZZZZ']}
但是,对于具有任意数量元素的列表,您可以使用否定索引:
new_d = {a:b[:-1]+[b[-1].upper()] for a, b in dd.items()}