将dict转换为元组保持ord

2024-05-16 08:59:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,这是一个例子dict它可以有任意数量的字段

{'name': 'satendra', 'occupation': 'engineer', 'age': 27}

我如何将其转换为元组以便它将得到元组的有序列表。在

^{pr2}$

更新

当传递给OrderedDict的元组的有序列表不是针对JSON对象传递给它时,OrderedDict很有用,所以我想这不是重复的


Tags: 对象namejsonage数量字典dict例子
3条回答

按照注释中的建议使用OrderedDict(),但要正确:

from collections import OrderedDict

d = OrderedDict([('name', 'satendra'), ('occupation', 'engineer'), ('age', 27)])

您可以将其定义为您希望的输出。然后你就可以像普通字典一样使用它。在

当你想要你的元组列表时,你需要:

^{pr2}$

当您知道要使用的密钥是什么并且不能使用OrderedDict()时,可以使用此解决方案:

def sortdict (d, keys=["name", "occupation"]):
    mx = len(keys)
    def customsortkey (key):
        try: return keys.index(key)
        except: return mx
    kys = sorted(d, key=customsortkey)
    return [(key, d[key]) for key in kys]

此函数将根据“keys”列表设置的顺序对输入字典“d”中的所有内容进行排序。字典中的任何项,如果其键不在列表“keys”中,则将以任意顺序将其放入输出的末尾。你可以指出字典中没有的键, 输出将是您需要的元组(键、值)的列表。在

这是一种可能的解决办法,但还远远不够理想。一、 我们可以开始讨论它的效率和开销。但实际上,在实践中它会很好地工作,并且可以很好地处理任何意外的键。 这个函数的更有效版本是使用字典来表示键的顺序,而不是列表。一种字典,它有一个关键字的关键字和它的值的排序索引。 像这样:

def sortdict (d, keys={"name": 0, "occupation": 1}):
    mx = len(keys)
    kys = sorted(d, key=lambda k: keys.get(k, mx))
    return [(key, d[key]) for key in kys]

正如你已经从评论中了解到的,没有秩序可以保留,因为没有秩序可以开始。这个JSON可以任意顺序从服务器到达。在

但是,如果您知道您感兴趣的键,您可以自己构造元组列表。在

注意,这段代码以已知的顺序在一个单独的键元组上迭代。你必须手动维护这个元组。在

relevant_keys = ('name', 'occupation', 'age')
data = {'occupation': 'engineer', 'age': 27, 'name': 'satendra'}
list_of_tuples = [(key, data[key]) for key in relevant_keys]
print(list_of_tuples)
#  [('name', 'satendra'), ('occupation', 'engineer'), ('age', 27)]

MyDict={'name':'satendra','职业':'工程师','年龄':27}

我的列表=[]

对于MyDict中的密钥:

MyList.append( (key,MyDict[key]) )

现在MyList是元组的列表。在

相关问题 更多 >