Python 如何将字典转换为元组列表?
如果我有一本字典,比如:Python 如何将字典转换为元组列表?,python,list,compatibility,iterable-unpacking,Python,List,Compatibility,Iterable Unpacking,如果我有一本字典,比如: { 'a': 1, 'b': 2, 'c': 3 } 我怎样才能把它转换成这个 [ ('a', 1), ('b', 2), ('c', 3) ] [ (1, 'a'), (2, 'b'), (3, 'c') ] 我怎样才能把它转换成这个呢 [ ('a', 1), ('b', 2), ('c', 3) ] [ (1, 'a'), (2, 'b'), (3, 'c') ] 这不是你想要的顺序,但是dicts没有任何特定的顺序。1根据需要对它进行排序或组织 见:
{ 'a': 1, 'b': 2, 'c': 3 }
我怎样才能把它转换成这个
[ ('a', 1), ('b', 2), ('c', 3) ]
[ (1, 'a'), (2, 'b'), (3, 'c') ]
我怎样才能把它转换成这个呢
[ ('a', 1), ('b', 2), ('c', 3) ]
[ (1, 'a'), (2, 'b'), (3, 'c') ]
这不是你想要的顺序,但是dicts没有任何特定的顺序。1根据需要对它进行排序或组织
见:
在Python3.x中,您将不使用
iteritems
(不再存在),而是使用items
,它现在将“视图”返回到字典项中。请参阅Python3.0的文档和新版本
1:dicts的插入顺序保留为
及
您需要的是
dict
的items()
和iteritems()
方法<代码>项返回(键、值)元组的列表。由于元组是不可变的,所以它们不能反转。因此,您必须迭代这些项并创建新的元组以获得反向(值、键)元组。对于迭代,iteritems
更可取,因为它使用生成器生成(键、值)元组,而不必将整个列表保存在内存中
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = { 'a': 1, 'b': 2, 'c': 3 }
>>> a.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v,k) for (k,v) in a.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]
>>>
您可以使用列表理解
[(k,v) for k,v in a.iteritems()]
您将获得[('a',1),('b',2),('c',3)]
和
[(v,k) for k,v in a.iteritems()]
另一个例子
如果你喜欢,你可以用它们做什么很有趣
>>> a={ 'a': 1, 'b': 2, 'c': 3 }
>>> [(x,a[x]) for x in a.keys() ]
[('a', 1), ('c', 3), ('b', 2)]
>>> [(a[x],x) for x in a.keys() ]
[(1, 'a'), (3, 'c'), (2, 'b')]
>>>a={'a':1,'b':2,'c':3}
>>>[(x,a[x])表示a.keys()中的x
[('a',1),('c',3),('b',2)]
>>>[(a[x],x)表示a.keys()中的x]
[(1,'a'),(3,'c'),(2,'b')]
由于没有其他人这样做,我将添加py3k版本:
>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> list(d.items())
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.items()]
[(1, 'a'), (3, 'c'), (2, 'b')]
创建一个名为tuples的列表
它通常使用起来非常方便。例如,您有一个字典,其中“name”作为键,“score”作为值,如:
d = {'John':5, 'Alex':10, 'Richard': 7}
您可以将这些项目列为元组,如果愿意,可以进行排序,并获取其名称和分数,比如说分数最高(index=0)的玩家非常像这样:
>>> player = best[0]
>>> player.name
'Alex'
>>> player.score
10
如何做到这一点:
按随机顺序或保持顺序列出:
按顺序,按值(“分数”)排序:
首先以最低分数排序:
worst = sorted(Player(v,k) for (k,v) in d.items())
best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
首先以最高分数排序:
worst = sorted(Player(v,k) for (k,v) in d.items())
best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
通过keys()
和values()
字典和zip的方法
zip
将返回元组列表,其作用类似于有序字典
演示:
>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> zip(d.keys(), d.values())
[('a', 1), ('c', 3), ('b', 2)]
>>> zip(d.values(), d.keys())
[(1, 'a'), (3, 'c'), (2, 'b')]
这些是Python3.x和Python2.x的突破性变化
用于Python3.x
dictlist = []
for key, value in dict.items():
temp = [key,value]
dictlist.append(temp)
对于Python2.7,请使用
dictlist = []
for key, value in dict.iteritems():
temp = [key,value]
dictlist.append(temp)
更简单的方法是
list(dictionary.items()) # list of (key, value) tuples
list(zip(dictionary.values(), dictionary.keys())) # list of (key, value) tuples
Python3dict.values()
不返回列表。这就是一个例子
mydict = {
"a": {"a1": 1, "a2": 2},
"b": {"b1": 11, "b2": 22}
}
print(mydict.values())
> output: dict_values([{'a1': 1, 'a2': 2}, {'b1': 11, 'b2': 22}])
print(type(mydict.values()))
> output: <class 'dict_values'>
print(list(mydict.values()))
> output: [{'a1': 1, 'a2': 2}, {'b1': 11, 'b2': 22}]
print(type(list(mydict.values())))
> output: <class 'list'>
mydict={
“a”:{“a1”:1,“a2”:2},
“b”:{“b1”:11,“b2”:22}
}
打印(mydict.values())
>输出:dict_值([{'a1':1,'a2':2},{'b1':11,'b2':22})
打印(键入(mydict.values())
>输出:
打印(列表(mydict.values())
>输出:[{'a1':1,'a2':2},{'b1':11,'b2':22}]
打印(类型(列表(mydict.values()))
>输出:
“[(k,v)for(k,v)in d.iteritems()]”与d.items()是一个可怕的等价物。这对我来说是collections.orderedict()
的替代品,它可以更好地处理多个版本的Python HTTP请求库。尽管我不喜欢zip
函数名,因为它有点模糊/重载。请注意zip
-ification不是一个“深层”转换,即如果有嵌套的子级,它们不会受到影响。您可能需要使用自己的递归。虽然这段代码可能有助于解决问题,但它没有解释为什么和/或如何回答这个问题。提供这种额外的环境将大大提高其长期教育价值。请在回答中添加解释,包括适用的限制和假设。items()在python3中返回dict_keys视图。使用对列表“list()”的强制转换包装此调用。请参见@SilentGhost的回复[tuple(反转(x)],了解d.items()中的x
@garej:Givenx
已经是代码中的元组了(根据items
的性质,生成tuple
的一个可数),只需对d.items()中的x执行[x[::-1]会更简单/更快;反向切片直接构造一个大小合适的反向元组
,而不是让元组
构造函数从一个反向
迭代器迭代地填充一个元组
。@ShadowRanger,你说得对。我只是想明确指出,在这种情况下并不总是需要k,v
模式
list(dictionary.items()) # list of (key, value) tuples
list(zip(dictionary.values(), dictionary.keys())) # list of (key, value) tuples
mydict = {
"a": {"a1": 1, "a2": 2},
"b": {"b1": 11, "b2": 22}
}
print(mydict.values())
> output: dict_values([{'a1': 1, 'a2': 2}, {'b1': 11, 'b2': 22}])
print(type(mydict.values()))
> output: <class 'dict_values'>
print(list(mydict.values()))
> output: [{'a1': 1, 'a2': 2}, {'b1': 11, 'b2': 22}]
print(type(list(mydict.values())))
> output: <class 'list'>