Python:如何在不反转原始字典的情况下反转新字典中的列表

时间:2014-10-27 06:23:43

标签: python list dictionary

我有一个列表字典说:

dic = {"foo" : [1,3,5,6] , "bar" : [5, 3, 8, 4]}

我正在尝试创建一个反向这些列表的新字典,而不会破坏原始

我甚至尝试过像

这样的事情
list1 =  dic["foo"]
list2 = list1.reverse()
newDic = {}
newDic["foo"] = list2

但似乎dic["A"]list1list2都指向相同的内存位置。 换句话说,dic["foo"]在这个过程中也会被颠倒过来,这不是我想要的! 这有什么简单的方法吗?

5 个答案:

答案 0 :(得分:2)

如果你想做整本字典试试这一个班轮:

newDic = {key:value[::-1] for key,value in dic.iteritems()}

如果你只想做一个清单,试试这个:

list1 =  dic["foo"]
newDic = {}
newDic["foo"] = list1[::-1]

list.reverse()会更改列表本身。试试list[::-1],它会返回一个反向列表的新副本

答案 1 :(得分:1)

list1.reverse()是一个就地逆转。请改用函数reversed(list1),它不会修改调用它的列表。

具体做法是:

dic = {"foo" : [1,3,5,6] , "bar" : [5, 3, 8, 4]}
list1 = dic["foo"]
list2 = list(reversed(list1))
newDic = {}
newDic["foo"] = list2

请注意,reversed(list1)会返回generator,您需要完整列表,这就是上面调用list的原因。

答案 2 :(得分:1)

问题是list2 = list1.reverse()

list.reverse()方法将反转相同的列表。

喜欢

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> a.reverse()
>>> a
[1234.5, 1, 333, 333, 66.25]

reverse的返回类型为None

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> b = a.reverse()
>>> b
>>> print b
None

所以在你的情况下list2 = None

另一个问题是

您正在访问 f00 ,密钥是 foo

答案 3 :(得分:1)

另一种方式:

list2 = []
for e in reversed(list1):
   list2.append(e)

list1.reverse()反转原始列表。相反,你可以在for循环中做。

答案 4 :(得分:0)

您真正的问题是创建列表的副本,因此您可以

list2 = list(list1)
list2.reverse()

list2 = list1[:]
list2.reverse()