Найти индекс по значениям в списке внутри словаря - PullRequest
0 голосов
/ 11 апреля 2020

Кто-нибудь знает, как получить индекс значений из словаря 2 в словаре 1 .. как это:

Dictionary_1= {A: [Tom, Jane, Joe]; B: [Joana, Clare, Tom]; C: [Clare, Jane, Joe]}

Dictionary_2 = {A: Tom; B: Clare; C: Jane}

RESULT = {A: 1; B: 2; C: 2}

РЕДАКТИРОВАТЬ: Извините, ребята .. прежде всего я запутался и забыл, что Мне нужно было, начиная с «0» вместо «1». У меня была проблема, но это было потому, что мой список внутри словаря 1 был в формате Unicode вместо списка.

Также ... в примере, который я использовал здесь, я заметил позже, что ключи существуют в обоих словарях, но в коде, который я пишу, это не одно и то же. Я не разместил оригинал здесь, потому что он был больше, поэтому я попытался возобновить как можно больше. Извините за это тоже.

Итак, я начал работать с этим кодом:

            RESULT = {}
            for x, y in Dictionary_1.items():
                for a, b in Dictionary_2 .items():
                    if x == a:
                        z = Dictionary_1[x]
                        r = eval(z)
                        if '{0}'.format(b) in r:
                            RESULT [a] = r.index('{0}'.format(b))

Я знаю, что это выглядит грязно, но я все еще учусь. Я очень ценю вашу помощь, ребята!

Ответы [ 4 ]

1 голос
/ 11 апреля 2020

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

dict1={'A':['Tom','Jane','Joe'],'B':['Joana','Clare','Tom'],'C':['Clare','Jane','Joe']}
dict2={'A':'Tom','B':'Clare','C':'Jane'}
result={k:dict1[k].index(v)+1 for k,v in dict2.values()}
# {'A': 1, 'B': 2, 'C': 2}
#Or
# {k:dict1.get(k).index(v)+1 for k,v in dict2.items()}

1 голос
/ 11 апреля 2020

Предполагая, что вам нужны индексы на основе 0, вы можете использовать list.index() с пониманием слов :

d1 = {'A': ['Tom', 'Jane', 'Joe'], 'B': ['Joana', 'Clare', 'Tom'], 'C': ['Clare', 'Jane', 'Joe']}

d2 = {'A': 'Tom', 'B': 'Clare', 'C': 'Jane'}

result = {k: d1[k].index(v) for k, v in d2.items()}

print(result)
# {'A': 0, 'B': 1, 'C': 1}

Если вы хотите, чтобы индексы начинались на 1, тогда вы можете сделать d1[k].index(v) + 1.

0 голосов
/ 11 апреля 2020

Это, конечно, не лучший подход, но я быстро это сделал:

dict1 = {0: ['Tom', 'Jane', 'Joe'], 1: ['Joana', 'Clare', 'Tom'], 2: ['Clare', 'Jane', 'Joe']}
dict2 ={0: 'Tom', 1: 'Clare', 2: 'Jane'}
result = {}

val_list = list(dict1.values())

for i in range(0,len(dict1)):
    result.update({i : val_list[i].index(dict2[i])})

print(result)
0 голосов
/ 11 апреля 2020

Легкое для вас решение для вас

d1 = {'A': ['Tom', 'Jane', 'Joe'], 'B': ['Joana', 'Clare', 'Tom'], 'C': ['Clare', 'Jane', 'Joe']}
d2 = {'A': 'Tom', 'B': 'Clare', 'C': 'Jane'}

output = {}
for k,v in d2.items():
    output[k] = d1[k].index(v)+1

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