簡體   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