[英]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.