Python 将顺序排序从列表转换为集合的数据结构
基本上,我的定义是这样的Python 将顺序排序从列表转换为集合的数据结构,python,python-3.x,list,set,Python,Python 3.x,List,Set,基本上,我的定义是这样的 nodes = ['Unix', 'BSD', 'Linux'] 当我尝试这个的时候 print(set(nodes)) 我期待它的结果 {'Unix', 'BSD', 'Linux'} 但我有这个 {'BSD', 'Linux', 'Unix'} 我不想破坏节点的顺序,有没有好的方法?集合和字典是没有顺序的,因为它们是基于散列的,所以根据输入的内容,计算一个散列值来将给定元素与键相关联。这就是为什么访问字典或集合是快速的O(1),但是如果您需要有序的数据,它可
nodes = ['Unix', 'BSD', 'Linux']
当我尝试这个的时候
print(set(nodes))
我期待它的结果
{'Unix', 'BSD', 'Linux'}
但我有这个
{'BSD', 'Linux', 'Unix'}
我不想破坏节点的顺序,有没有好的方法?
集合和字典是没有顺序的,因为它们是基于散列的,所以根据输入的内容,计算一个散列值来将给定元素与键相关联。这就是为什么访问字典或集合是快速的O(1)
,但是如果您需要有序的数据,它可能不是最佳选择
那么,您可能正试图通过创建一个集合来消除重复项?相反,您可以使用OrderedDict
并访问键
以获得唯一列表
from collections import OrderedDict
nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()
集合
和字典
是基于散列
的,因此根据输入内容,计算一个散列
值以将给定元素与键关联起来。这就是为什么访问字典或集合是快速的O(1)
,但是如果您需要有序的数据,它可能不是最佳选择
那么,您可能正试图通过创建一个集合来消除重复项?相反,您可以使用OrderedDict
并访问键
以获得唯一列表
from collections import OrderedDict
nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()
您有两个选择:
第一种选择:
使用有序dict:
根据@user1767754的建议:
from collections import OrderedDict
nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()
第二种方法是跟踪索引和值:
因此,首先创建一个包含索引、值的dict:
nodes = ['Unix', 'BSD', 'Linux']
order={}
for i,j in enumerate(nodes):
order[i]=j
print(order)
它将提供:
{0: 'Unix', 1: 'BSD', 2: 'Linux'}
['Unix', 'BSD', 'Linux']
现在做一些事情,比如将列表转换为set或任何你想做的事情,最后再次转换为如下列表:
new=[]
for i in set(nodes):
for k,j in order.items():
if i==j:
new.insert(k,j)
print(new)
现在它将给出:
{0: 'Unix', 1: 'BSD', 2: 'Linux'}
['Unix', 'BSD', 'Linux']
您有两个选择:
第一种选择:
使用有序dict:
根据@user1767754的建议:
from collections import OrderedDict
nodes = ['Unix', 'BSD', 'Linux']
uniques = OrderedDict((x, True) for x in nodes).keys()
第二种方法是跟踪索引和值:
因此,首先创建一个包含索引、值的dict:
nodes = ['Unix', 'BSD', 'Linux']
order={}
for i,j in enumerate(nodes):
order[i]=j
print(order)
它将提供:
{0: 'Unix', 1: 'BSD', 2: 'Linux'}
['Unix', 'BSD', 'Linux']
现在做一些事情,比如将列表转换为set或任何你想做的事情,最后再次转换为如下列表:
new=[]
for i in set(nodes):
for k,j in order.items():
if i==j:
new.insert(k,j)
print(new)
现在它将给出:
{0: 'Unix', 1: 'BSD', 2: 'Linux'}
['Unix', 'BSD', 'Linux']
集合未排序。为了维持秩序(简单),使用列表或元组。这是我的家庭作业,所以我必须按设置输出。你的家庭作业到底要求你做什么?恐怕你不能既有顺序又有一套(除非你使用,我怀疑这是在家庭作业问题中提出的)。确保问题是什么。也许这意味着,“从重复的项目中创建一个集合,然后对结果进行排序”…集合没有排序。为了维持秩序(简单),使用列表或元组。这是我的家庭作业,所以我必须按设置输出。你的家庭作业到底要求你做什么?恐怕你不能既有顺序又有一套(除非你使用,我怀疑这是在家庭作业问题中提出的)。确保问题是什么。也许这意味着,“从重复的项目中创建一个集合,然后对结果进行排序”。。。