Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-如何访问字典中由用户输入添加的值?_Python_List_Dictionary - Fatal编程技术网

Python-如何访问字典中由用户输入添加的值?

Python-如何访问字典中由用户输入添加的值?,python,list,dictionary,Python,List,Dictionary,假设我有一个空字典,用户可以在其中添加任意数量的项。在用户将项添加到字典中之后,我想循环浏览该字典,并能够从中提取值。既然我不知道密钥的名称,那么访问字典中项目的最佳方式是什么 例如,假设我有以下几点: # my shopping cart that starts off empty shopping_cart = {} # user enters how many items they will have in the cart total total_items = input("How

假设我有一个空字典,用户可以在其中添加任意数量的项。在用户将项添加到字典中之后,我想循环浏览该字典,并能够从中提取值。既然我不知道密钥的名称,那么访问字典中项目的最佳方式是什么

例如,假设我有以下几点:

# my shopping cart that starts off empty
shopping_cart = {}

# user enters how many items they will have in the cart total
total_items = input("How many items will you add to your cart? ")

# User adds both the value and the key of each item to add
for i in total_items:
    name = input("Enter name of item to add: ")
    location = input("Is the item in front, middle, or back of cart? ")

    shopping_cart[name] = location
在这一点上,我有一个购物车字典,但我没有办法知道什么是键或值

。。。。。现在假设有一个由数千个字符组成的大字符串,按随机顺序排列,称为随机字符串。它看起来像axdfebzsdcdslapplefjdkslazpair。。。。。请注意字符串是随机的,但周期性地会出现apple和pair等项目的名称

我想做的是循环我的购物车字典,并在我的随机字符串中找到下一个索引位置,在那里我的购物车中的项目出现

例如,假设用户向购物车添加了3个项目。这些东西是驴子,苹果,一对

我要做的是按顺序读取random_字符串,然后返回字符串中出现的字典值。也就是说,在本例中,apple是随机字符串中的下一个项,因此应该返回它,以便我可以在字典中查找apple的值并获得该项的位置

我有工作代码来做所有必要的事情,除了知道如何从字典中取出键。我复制了下面的一行,它基本上显示了我正在努力实现的目标。问题是我不知道DICT_键是什么,因为它是由用户添加的

索引=随机字符串。查找[DICT\u KEY],索引

。。。。。。。。我不想混淆,但我正在考虑制作一个反映字典值的空列表。换句话说,当用户将apple项添加到字典中时,我可以将其添加到字典和列表中。这样,我就可以通过使用该项在列表中的索引位置在字典中查找该项。这似乎是一个糟糕的处理方式,所以很高兴能得到任何建议,你可以提供

正如你所看到的,我是新手

>>> a={'apple':'front','donkey':'middle','pair':'back'}
>>> s='asdfhskdfksjdf;ksjapplefsakdjfskdjfapplesdfksdjdonkeydlkfjsldjfdpair'
>>> {k:[m.start() for m in re.finditer(k,s)] for k in a}
{'pair': [64], 'donkey': [47], 'apple': [18, 35]}
这一个在索引18/35/47/64的字符串中发现了两个苹果、一头驴和一对驴

解释 跟进前面使用的命令

用我拥有的键创建一个新字典,并指定一个常量值

>>> a
{'pair': 'back', 'donkey': 'middle', 'apple': 'front'}
>>> {k:0 for k in a}
{'pair': 0, 'donkey': 0, 'apple': 0}
这使我们能够创建一个字典,其中每个键都具有相同的值0。a是你已经编好的字典

现在,让我们看看如何在大字符串中设置这些单词的索引值

>>> [m.start() for m in re.finditer('apple',s)]
[18, 35]
返回与apple相同数量的匹配项。 对于这样找到的每个匹配项m,返回匹配项的开始索引。 现在,这给出了苹果在字符串中出现的索引列表

>>> {k:[m.start() for m in re.finditer(k,s)] for k in a}
{'pair': [64], 'donkey': [47], 'apple': [18, 35]}
最后,如果我们将上述两种方法结合起来,我们就可以得到一本带有原始密钥的词典。和值作为索引列表显示在字符串中

>>> {k:[m.start() for m in re.finditer(k,s)] for k in a}
{'pair': [64], 'donkey': [47], 'apple': [18, 35]}
更新2 在新请求之后。评论中

>>> d={k:[m.start() for m in re.finditer(k,s)] for k in a}
>>> from collections import defaultdict
>>> nd=defaultdict(list)
>>> for k in d:
...   nd[a[k]].extend(d[k])
... 
>>> dict(nd)
{'front': [18, 35], 'middle': [47], 'back': [64]}
如果你不想再看两遍的话

更新3

更新

如果索引对您更重要,请执行以下操作

>>> {m.start():k  for k in a for m in re.finditer(k,s)}
{64: 'pair', 18: 'apple', 35: 'apple', 47: 'donkey'}

listmy_dict为您提供了一个密钥列表。。。或者直接循环:对于我的dict:do\u stuffx中的x,x将是键。听起来你根本不想要字典,如果你想循环阅读的话。这违背了字典的全部目的。我想你可能是对的,我不应该在这里使用字典。。。但是我怎样才能将第二个值与它联系起来呢?也就是说,在上面的例子中,我想知道每个项目应该在什么位置。有没有比字典更好的方法来实现这两个值之间的链接?谢谢使用两个列表,它们通过索引具有对应性,或者使用元组列表。嗯。。。。对这可能正是我要找的。我最终希望对这些值进行排序,以便在按顺序对每个值进行操作时确定下一个值。我不完全理解你的答案,所以我非常感谢你的解释。非常感谢@解释清楚了吗?我想我明白了。因此,创建字典a就像我在OP中所做的那样。然后创建第二个字典,其键与a相同,但值设置为“0”。然后,使用一些我还不完全理解的魔法,您可以使用函数re.finditerx,y返回字符串中每个键的位置。如果我基本上理解正确,我只需要阅读一下.start和re.finditer,以便更好地理解。否则,这看起来就像我想做的。非常感谢你的解释!我给re.finditer和MATCH.start放了一张便条。另外,如果你独立地与他们玩,你将能够理解正在发生的事情。这也会有帮助,你真是太棒了。非常感谢-我现在开始测试,但这不仅是解决我问题的一个很好的方法,而且finditer看起来比我以前的u 唱,找到!
>>> {m.start():k  for k in a for m in re.finditer(k,s)}
{64: 'pair', 18: 'apple', 35: 'apple', 47: 'donkey'}