繁体   English   中英

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

[英]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"]list1list2都指向相同的内存位置。 换句话说, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM