Сторнирование значений ключа в словаре (расширенная обратная строка в Python) - PullRequest
0 голосов
/ 26 декабря 2018

Итак, я пытался вывести строку «33k22k11k», которая является только последним значением, за которым следует обратный последний ключ, затем второе последнее значение, затем второй последний обратный ключ и так далее.Я не уверен, как получить значение обратного ключа для конкретного цикла, в котором я нахожусь. Из кода, который у меня есть в настоящее время, я получаю вывод:

dict = {"k1":1, "k2":2, "k3":3}
current=""
current_k=""
for k,v in dict.items():
    for i in k:
        current_k=i+current_k
    current=str(v)+current_k+current
print(current)
print(current_k)

33k2k1k22k1k11k

3k2k1k

Ответы [ 5 ]

0 голосов
/ 26 декабря 2018

Вы можете использовать функцию Python map, чтобы создать обратную строку (используя f-строку) для каждой пары ключ / значение, а затем присоединиться к ней.

dict1 = {"k1":1, "k2":2, "k3":3}
new_dict =  "".join(map(lambda k, v: f'{k}{v}'[::-1] , dict1.keys(), dict1.values()))

Вывод:

33k22k11k
0 голосов
/ 26 декабря 2018

Вы можете сделать что-то вроде этого, возможно:

dict = {"k1":1, "k2":2, "k3":3}
print("".join(list(reversed([str(v)+"".join(reversed(k)) for k, v in dict.items()]))))               

Вывод:

33k22k11k
0 голосов
/ 26 декабря 2018

Почему бы просто не сделать:

print(''.join([a+str(b) for a,b in dict.items()])[::-1])

Вывод:

"33k22k11k"

Но если значения отличаются от ключей, выполните:

print(''.join([str(b)[::-1]+a for a,b in dict.items()[::-1]]))
0 голосов
/ 26 декабря 2018

Отредактировано

Прежде всего, если вы на питоне <3.6, <code>dict не сохраняет порядок элементов.Возможно, вы захотите использовать collections.OrderedDict для своих целей.

d = {"k1":1, "k2":2, "k3":3}
d.keys()
# dict_keys(['k2', 'k1', 'k3'])

, тогда как

d = OrderedDict()
d['k1'] = 1
d['k2'] = 2
d['k3'] = 3
d.keys()
# odict_keys(['k1', 'k2', 'k3'])

С нашим новым d вы можете либо добавить ключ и значения, либо повернуть его вспять:

res = ''
for k, v in d.items():
    res += str(k) + str(v)
res[::-1]
# '33k22k11k'

или итерация в обратном порядке:

res = ''
for k, v in reversed(d.items()):
    res +=  str(v)[::-1] + str(k)[::-1]
res
# '33k22k11k'
0 голосов
/ 26 декабря 2018

Возможно, я ошибаюсь, но, похоже, вы захотите сбрасывать значение current_k каждый раз, когда получаете доступ к новому ключу

dict = {"k1":1, "k2":2, "k3":3}
current=""
for k,v in dict.items():
    current_k=""
    for i in k:
        current_k=i+current_k
    current=str(v)+current_k+current
print(current)
print(current_k)
...