python比较元组列表中具有相同索引的元素

python比较元组列表中具有相同索引的元素,python,Python,我有一个元组列表: list = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'), (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')] 我需要比较每个元组的index1元素,即 'Red Hat Enterprise Linux 6' 对于前两个元组也是一样的 以及元组3中的第一个索

我有一个元组列表:

list = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'), (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]
我需要比较每个元组的index1元素,即

'Red Hat Enterprise Linux 6'
对于前两个元组也是一样的

以及元组3中的第一个索引元素,即:

'Red Hat Enterprise Linux 7'
我的目标是一旦我检测到元组2中的元素索引1是重复的

从列表中删除此元组

我已经试着创建一个新的列表,其中包含所需的元组

空名单

new_list = []
for i in list:
    rhel_ver = str(i[1])
    if rhel_ver not in i:
         new_list.append(i)
正在获取空列表。如何仅获取包含 rhel版本,即:

list = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]

您可以使用内置的
any
创建新的唯一列表:

my_list = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'),
           (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]

unique_list = []
for element in my_list:
    if not any(tup[1] == element[1] for tup in unique_list):
        unique_list.append(element)

print(unique_list)

您可以使用内置的
any
创建新的唯一列表:

my_list = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'),
           (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]

unique_list = []
for element in my_list:
    if not any(tup[1] == element[1] for tup in unique_list):
        unique_list.append(element)

print(unique_list)

您可以跟踪已在
集合中看到的元素:

lst = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]
seen = set()
result = []
for rhsa, name in lst:
    if name not in seen:
        result.append((rhsa, name))
        seen.add(name)
print(result)
# [('RHSA-2017:1270', 'Red Hat Enterprise Linux 6'), ('RHSA-2017:1270', 'Red Hat Enterprise Linux 7')]

您可以跟踪已在
集合中看到的元素:

lst = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]
seen = set()
result = []
for rhsa, name in lst:
    if name not in seen:
        result.append((rhsa, name))
        seen.add(name)
print(result)
# [('RHSA-2017:1270', 'Red Hat Enterprise Linux 6'), ('RHSA-2017:1270', 'Red Hat Enterprise Linux 7')]

可以使用python OrderedDict创建一个新列表,将索引1(元组中的第二个元素)设置为键。这将删除任何重复项。然后可以从有序的Dict.python2.7生成一个新列表

import collections
tagPairs=collections.OrderedDict()

lst = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]
for i,v in lst:
    tagPairs[v]=i
unique_list=[]
for k,j in tagPairs.items():
    unique_list.append((j,k))
print unique_list

您可以使用python OrderedDict创建一个新列表,将索引1(元组中的第二个元素)设置为键。这将删除任何重复项。然后可以从有序的Dict.python2.7生成一个新列表

import collections
tagPairs=collections.OrderedDict()

lst = [(u'RHSA-2017:1270', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1271', u'Red Hat Enterprise Linux 6'), 
       (u'RHSA-2017:1270', u'Red Hat Enterprise Linux 7')]
for i,v in lst:
    tagPairs[v]=i
unique_list=[]
for k,j in tagPairs.items():
    unique_list.append((j,k))
print unique_list

我认为OP希望保留任何唯一键的第一个元素,但您可以通过使用反向(lst)中I,v的
来解决这个问题。另外,最后一部分可以通过列表理解来缩短(或者只做
tagPairs[v]=(i,v)
,然后再做
unique\u list=list(tagPairs.items())
)我认为OP希望保留任何唯一键的第一个元素,但您可以通过在反转(lst)中使用
来解决这个问题。另外,最后一部分可以通过列表理解缩短(或者只做
tagPairs[v]=(i,v)
,然后再做
unique\u list=list(tagPairs.items())