[英]Python: How to reverse a list in a new dictionary without reversing the original
我有一个列表字典说:
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"]
在这个过程中也会被颠倒过来,这不是我想要的! 这有什么简单的方法吗?
如果你想做整个字典试试这个班轮:
newDic = {key:value[::-1] for key,value in dic.iteritems()}
如果您只想做一个列表,请尝试以下方法:
list1 = dic["foo"]
newDic = {}
newDic["foo"] = list1[::-1]
list.reverse()
将更改列表本身。 尝试list[::-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)
返回一个生成器 ,你想要完整列表,这就是为什么在上面调用list
的原因。
问题是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
其他方式:
list2 = []
for e in reversed(list1):
list2.append(e)
list1.reverse()反转原始列表。 相反,你可以在for循环中做。
你真正的问题是创建列表的副本,所以你可以这样做
list2 = list(list1)
list2.reverse()
要么
list2 = list1[:]
list2.reverse()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.