Сравнить списки в одном словаре списков - PullRequest
4 голосов
/ 16 апреля 2020

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

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

с самого начала я вставляю элементы, используя файлы в качестве аргументов, и они читаются в функции

def shared(list):
        dict_shared = {}
        for i in list:
                infile = open(i, 'r')
                if i not in dict_shared:
                        dict_shared[i] = []

                for line in infile:
                        dict_shared[spacer].append(record.id)

        return dict_shared

Теперь я застрял, пытаясь найти способ сравнения списков, созданных и представленных в словаре.

dict = {a:[1,2,3,4,5], b:[2,3,4,6]}

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

a: [1,5]
b: [6]
a-b: [2,3,4]

Отныне я не могу найти способ решить эту проблему. Любое предложение?

Ответы [ 6 ]

5 голосов
/ 16 апреля 2020

Вы можете сделать это, используя python встроенные функции, такие как union, difference, intersection. Примечание: Это для sets, вы можете преобразовать list в set на

1stset = set(a)

пример:

print(1stset.difference(2ndset))

print(1stset.intersection(2ndset))

print(1stset.union(2ndset))

Вы можете ссылаться на следующие ссылки для получения дополнительной информации

https://www.geeksforgeeks.org/python-intersection-two-lists/

https://www.geeksforgeeks.org/python-union-two-lists/

https://www.geeksforgeeks.org/python-difference-two-lists/

5 голосов
/ 16 апреля 2020

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

d = {'a':[1,2,3,4,5], 'b':[2,3,4,6]}
print(list(set(d['a'])-set(d['b'])))
print(list(set(d['b'])-set(d['a'])))
print(list(set(d['b'])&set(d['a'])))

результат:

[1, 5]
[6]
[2, 3, 4]
4 голосов
/ 16 апреля 2020

Решение с пониманием списка будет выглядеть следующим образом:

dictionary = {'a':[1,2,3,4,5], 'b':[2,3,4,6]}

only_in_a = [x for x in dictionary['a'] if not x in dictionary['b']]
only_in_b = [x for x in dictionary['b'] if not x in dictionary['a']]
in_both = [x for x in dictionary['a'] if x in dictionary['b']]

Обратите внимание, что это не особенно разумно с точки зрения сложности для больших списков.

3 голосов
/ 16 апреля 2020

Вы можете попробовать что-то вроде этого

mydict = {'a': [1,2,3,4,5], 'b': [2,3,4,6]}

>>> list(set(mydict['a']).intersection(mydict['b']))  # common to both
 [2, 3, 4]
>>> list(set(mydict['a']).difference(mydict['b']))  # a - b
 [1, 5]
>>> list(set(mydict['b']).difference(mydict['a']))  # b - a
 [6]
>>> list(set(mydict['a']).union(mydict['b']))  # union of both
 [1, 2, 3, 4, 5, 6]
3 голосов
/ 16 апреля 2020

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

dictionary = {"a":[1,2,3,4,5], "b":[2,3,4,6]}

#in a but not in b
set(dictionary["a"]) - set(dictionary["b"])

#in b but not in a
set(dictionary["b"]) - set(dictionary["a"])

#union of both
set(dictionary["b"]).union(set(dictionary["a"]))

#intersection of both
set(dictionary["b"]).intersection(set(dictionary["a"]))
2 голосов
/ 16 апреля 2020

Попробуйте это

print("a - b : {} ".format(list(set(_dict['a']) - set(_dict['b']))))
print('b - a : {} '.format(list(set(_dict['b']) - set(_dict['a']))))
print('a \u2229 b : {} '.format(list(set(_dict['a']).intersection(set(_dict['b'])))))

Вывод

a - b : [1, 5] 
b - a : [6] 
a ∩ b : [2, 3, 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...