我正在创建python中的字典,但list和python之间的细线让我很困惑。我拥有的是
values = []
我在哪里将值存储为
values.append({newvalue : oldvalue})
列表或字典无论它是什么,它都在工作,但不检查它们之间的重复。所以我做的是
for i in range(len(values)):
if ((newvalue not in values[i])):
values.append({newvalue: oldvalue})
但这不起作用。为什么?我该如何解决这个问题?如果你有时间,请解释列表与字典的不同之处以及我的代码中有什么。列表或字典?
由于
答案 0 :(得分:2)
首先,如果你想要一个空字典,不要做values = []
列表,而不是
values = {}
添加到词典时,请执行此操作
mydict[mykey] = myvalue
在检查键中是否已存在某些内容时执行此操作
if newkey not in mydict:
print('this will not overwrite anything')
我认为你误解了字典的概念
执行此操作时,key
将成为您的词典键,val
将成为您的词典值。字典是{key:value}顺序中的一组术语的组合,因此,如果您执行myDict[key]
,您将获得value
如果你想在确保不覆盖任何内容的同时添加到字典中,这个简单的例子将为你做到这一点。
if newkey not in mydict:
mydict[newkey] = newvalue
答案 1 :(得分:0)
列表是一系列元素。元素由隐式索引编号(和排序)。您主要使用此索引来标识列表中的元素。元素可以重复。索引不是。如果为任何元素(由索引标识)指定新值,则新值将替换旧值。
示例:在["day", "midnight", "night", "noon", "day", "night"]
中,(隐式)索引为0,1,2,3,4和5. list[0]
为“日”,list[1]
为“午夜”, list[4]
也是“日”,依此类推。 list[3]= "midday"
将元素3的值从“正午”更改为“正午”。 list.append("afternoon")
在列表末尾添加了一个元素,该元素变为list[6]
。
列表可用于表示:
词典是没有内在顺序的元素的集合。字典中的元素由显式键标识。与列表一样,元素可以重复,但键不能重复,如果为任何元素(由键标识)分配新值,则新值将替换旧值。
示例:在{"dia": "day", "medianoche": "midnight", "noche": "night", "mediodia": "noon", "tag": "day", "nacht": "night"}
键中有“dia”,“medianoche”,“noche”,“mediodia”,“tag”和“nacht”。 dict["dia"]
为“日”,dict["medianoche"]
为“午夜”,dict["tag"]
也为“日”,依此类推。 dict["mediodia"]= "midday"
会将“mediodia”中标识的元素的值从“正午”替换为“正午”,而dict["tardes"]= "afternoon"
会为值为“下午”的关键“tardes”添加元素,因为之前没有“tardes”标识的元素。这与列表不同,后者需要append
来添加元素。
字典对于表示:
非常有用答案 2 :(得分:0)
在您的代码中,您正在创建一个空列表
values = []
然后,您创建一个字典{newvalue : oldvalue}
,其中只有一个元素oldvalue
,其键为newvalue
。最后,通过方法append
将此字典添加到列表中。是的,在Python中,将字典作为列表和列表的元素作为字典(甚至是键)的元素是绝对有效的。但是,这很可能不是你想要实现的目标。
如果您想要的是包含元素newvalue
和oldvalue
的列表,那么您应该写一下:
values= []
values.append(newvalue)
values.append(oldvalue)
或只是
values= [newvalue, oldvalue]
如果您想要的是包含由键oldvalue
标识的单个元素newvalue
的字典,那么您应该写一下:
values= {}
values[newvalue]= oldvalue
或只是
values= {newvalue: oldvalue}
您的代码无效,因为values
最初为空,因此for
循环根本不会迭代。你可能想要的是:
values= {}
if newvalue not in values.keys(): # "newvalue not in values" is shorter but can be misleading
values[newvalue]= oldvalue
或
values= {}
if values[newvalue] is None:
values[newvalue]= oldvalue
此外,values.update({newvalue: oldvalue})
是values[newvalue]= oldvalue
的同义词,但您似乎试图通过执行values.append({newvalue: oldvalue})
来混合使用此表单和列表。同样,字典不是单元素字典列表(这是您正在构建和尝试操作的字典)。