我有一个列表字典说:
dic = {"foo" : [1,3,5,6] , "bar" : [5, 3, 8, 4]}
我正在尝试创建一个反向这些列表的新字典,而不会破坏原始
我甚至尝试过像
这样的事情list1 = dic["foo"]
list2 = list1.reverse()
newDic = {}
newDic["foo"] = list2
但似乎dic["A"]
,list1
和list2
都指向相同的内存位置。
换句话说,dic["foo"]
在这个过程中也会被颠倒过来,这不是我想要的!
这有什么简单的方法吗?
答案 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()