Сравнение словаря со списком в качестве значений и словаря для генерации значений - PullRequest
0 голосов
/ 16 января 2019

Пожалуйста, мне нужна помощь для сравнения двух словарей ниже с генератором.

r = {1:['1', '2', '3'], 2:['1', '2', '3'], 3:['1', '2', '3', '4', '5']}

d = {2: 2, 1: 4, 3: 1}

for k,v in d.items():
    if k == 2 and v == 1:
        print(r[2][1])
    if k == 2 and v == 2:
        print(r[2][2])
    if k == 2 and v == 3:
        print(r[2][3]) 

Что я хочу сделать, это вывести из r значение, равное ключу и значение в d. код работал так, как я пробовал, как описано выше. но я не могу продолжать, если что-то, пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

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

r = {1:['1', '2', '3'], 2:['1', '2', '3'], 3:['1', '2', '3', '4', '5']}
d = {2: 2, 1: 4, 3: 1}

for k,v in d.items():
    if k < len(r) and v < len(r[k]):
        print(r[k][v])
0 голосов
/ 16 января 2019

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

for k, v in d.items():
    try:
        print(r[k][v])
    except (KeyError, IndexError):
        pass

# 3
# 2

KeyError может быть вызвано, если первый индексатор k не является словарным ключом. IndexError может быть увеличено, если второй индексатор v слишком большой, учитывая значение списка словаря. Вы должны тщательно определить, какие ошибки регистрировать и как ими управлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...