как назначить оценку подсписку словам и создать новый словарь - PullRequest
1 голос
/ 24 января 2020

У меня есть словарь adict:

a={"good":2, "bad":-2}

список с подсписком строк b:

b=[["how", "are", "good"],["bad", "BAD", "hello"]]

и список целых чисел, длина которого равна списку b и оценка каждого подсписка b:

c=[2, -4] 

Мне нужно присвоить оценку подсписка тем словам в b, которые не отображаются в клавишах a. Следует создать новый словарь следующим образом:

{{"how":2, "are":2},{"hello":-4}}

Я пробовал следующий код, но он не работает:

for sublst in b:
    for i in sublst:
        if i.lower() not in a.keys():
            newdict=dict(zip(sublst, c))

Ответы [ 3 ]

1 голос
/ 24 января 2020

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

k = a.keys()
[{w:s for w in l if w.lower() not in k} for l,s in zip(b,c)]
# [{'how': 2, 'are': 2}, {'hello': -4}]
1 голос
/ 24 января 2020

Ваш код идет не так в строке zip. Во-первых,

sublist = [['how', 'are', 'good']
           ['bad', 'BAD', 'hello']]

, в то время как

c = [2, -4]

(подсписок, c) работает для первых двух элементов, а не для элементов, удовлетворяющих условию. Чтобы это работало, должен быть создан другой список, состоящий из

[['how', 'are'], ['hello']]

Но это не дает возможности сжать значения, потому что zip не работает в списке списков. Таким образом, решение этой проблемы выходит для хранения значения c [i] для i-го элемента b. Если какой-либо подэлемент удовлетворяет условию, обновите словарь, в противном случае продолжайте повторять и изменять значение c [i]. Этот метод реализован следующим образом: -

dic = {}
for i in range(len(b)):
    score = c[i]
    for j in b[i]:
        if j.lower() not in a.keys():
            dic.update({j : score})
1 голос
/ 24 января 2020
a={"good":2, "bad":-2} 
b=[["how", "are", "good"],["bad", "BAD", "hello"]]
c=[2, -4]

new_list = []
for i in range(len(b)):
    value = c[i]
    d= {}
    for word in b[i]:
        if(word.lower() not in a.keys()):
            d[word] = value
    new_list.append(d.copy())

print(new_list)

вывод:

 [{'how': 2, 'are': 2}, {'hello': -4}]
...