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())
)