0

我正在努力在 python 中创建一个字典,但是 list 和 python 之间的细线让我很困惑。我所拥有的是

values = []

我将在哪里将值存储为

values.append({newvalue : oldvalue})

列表或字典无论它是什么,它都在工作,但不检查自身之间的重复。所以我所做的是

for i in range(len(values)):
    if ((newvalue not in values[i])):
         values.append({newvalue: oldvalue})

但这不起作用。为什么?我该如何解决这个问题?如果您有时间,请解释列表与字典的不同之处以及我的代码中有什么。列表还是字典?

谢谢

4

3 回答 3

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
于 2013-08-05T17:46:22.350 回答
0

列表是元素的序列元素由隐式索引编号(和排序) 。您主要使用此索引来识别列表中的元素。元素可以重复。索引不是。如果您为任何元素(由其索引标识)分配新值,则新值将替换旧值。

示例:在["day", "midnight", "night", "noon", "day", "night"]中,(隐式)索引是 0、1、2、3、4 和 5。 list[0]是“day”,list[1]是“midnight”,list[4]也是“day”,依此类推。 list[3]= "midday"将元素 3 的值从“中午”更改为“中午”。 list.append("afternoon")在列表末尾添加一个元素,变为list[6].

列表可用于表示:

  • (可能重复的)元素的集合。
  • 当元素的顺序(在列表中的位置)很重要时的元素集合。

字典是没有内在顺序的元素的集合。字典中的元素由显式键标识。与列表一样,元素可以重复,但键不能重复,如果您为任何元素(由其key标识)分配新值,新值将替换旧值。

示例:在{"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”标识的元素的值从“noon”替换为“midday”,并dict["tardes"]= "afternoon"为键“tardes”添加一个值为“afternoon”的元素,因为之前没有由“tardes”标识的元素。这与需要append添加元素的列表不同。

字典可用于表示:

  • 数据的关联(“翻译”,“等价物”)(即键到元素,但不是相反,因为元素可以重复)。
  • 带有“索引”的“列表”不是整数值(而是字符串、浮点值等)
  • “稀疏列表”,其中键是整数,但大部分元素是无。通常这样做是为了节省内存。
于 2013-08-05T18:33:02.457 回答
0

在您的代码中,您正在创建一个空列表

values = [] 

然后,您创建一个字典{newvalue : oldvalue},其中只有一个oldvalue键为newvalue. 最后,您通过方法将此字典添加到列表中append。是的,在 Python 中,将字典作为列表的元素并将列表作为字典的元素(甚至它们的键)是绝对有效的。但是,这很可能不是您想要实现的。

如果你想要的是一个包含元素的列表newvalueand oldvalue,你应该这样写:

values= []
values.append(newvalue)
values.append(oldvalue)

或者干脆

values= [newvalue, oldvalue]

如果你想要的是一个oldvalue由 key 标识的单个元素的字典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})。同样,字典不是单元素字典的列表(这是您正在构建和尝试操作的)。

于 2013-08-05T19:05:56.710 回答