Понимание словаря: изменить последний элемент в значении списка - PullRequest
0 голосов
/ 14 мая 2018

У меня есть словарь Python, отображающий строки в списки строк.

  • Я хочу изменить последний элемент каждого списка в верхний регистр, используя словарь

Например, для этого примера

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, хотя и не по своей вине)

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Используйте простой цикл 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']}

Понимание словаря не может содержать назначения, и поэтому не подходит для логики, которую вы пытаетесь применить.

0 голосов
/ 14 мая 2018

Вы можете использовать распаковку:

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()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...