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_Merge - Fatal编程技术网

Python 在字典中输入两个数组中的数据

Python 在字典中输入两个数组中的数据,python,list,dictionary,merge,Python,List,Dictionary,Merge,我想在字典中合并以下两个数组: # Input: wrd = ['i', 'am', 'am', 'the', 'boss', 'the', 'tiger', 'eats', 'rice', 'eats', 'grass'] cnt = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Output: { 'i': [0], 'am': [1,2], 'the': [3,5], 'boss': [4], 'tiger': [6],

我想在字典中合并以下两个数组:

# Input:
wrd = ['i', 'am', 'am', 'the', 'boss', 'the', 'tiger', 'eats', 'rice', 'eats', 'grass']
cnt = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Output: 
{
    'i': [0],
    'am': [1,2],
    'the': [3,5],
    'boss': [4],
    'tiger': [6],
    'eats': [7,9],
    'rice': [8],
    'grass': [10]
}
我尝试了以下代码,但我认为我的想法是错误的:

    dict={}
    j=0
    for i in wrd:
        if i in dict:
           dict[i].insert(cnt[j])
        else:
           dict[i].append(cnt[j])
           j+=1

    v=dict.values()
    k=dict.keys()
    for k,v in dict.items():
         print k,v
由于我是python的新手,我承认我在这里缺乏知识

在这里使用。请参阅片段

>>> wrd=['i','am','am','the','boss','the','tiger','eats','rice','eats','grass']
>>> cnt=[0,1,2,3,4,5,6,7,8,9,10]
>>> from collections import defaultdict
>>> a = defaultdict(list)
>>> for key, val in zip(wrd, cnt): # Preferably for val, key in enumerate(wrd):
        a[key].append(val)


>>> a
defaultdict(<type 'list'>, {'grass': [10], 'i': [0], 'am': [1, 2], 'eats': [7, 9], 'boss': [4], 'tiger': [6], 'the': [3, 5], 'rice': [8]})
>>> a['am']
[1, 2]
>>> a['the']
[3, 5]
wrd=['i'、'am'、'am'、'the'、'boss'、'the'、'tiger'、'eats'、'rice'、'eats'、'grass'] >>>cnt=[0,1,2,3,4,5,6,7,8,9,10] >>>从集合导入defaultdict >>>a=defaultdict(列表) >>>对于键,zip中的val(wrd,cnt):#对于val,最好是枚举中的键(wrd): a[key].append(val) >>>a defaultdict(,{'grass':[10],'i':[0],'am':[1,2],'eats':[7,9],'boss':[4],'tiger':[6],'the':[3,5],'rice':[8]) >>>a['am'] [1, 2] >>>a[“the”] [3, 5]
使用合适的工具来完成工作(这里,
defaultdict
,如Sukrit Kalla的回答所示)始终是最好的解决方案。但了解你的尝试有什么问题也很有用

if i in dict:
   dict[i].insert(cnt[j])
else:
   dict[i].append(cnt[j])
   j+=1
如果
i
已经在
dict
中,那很好:
dict[i]
是一个列表,您将调用它上的
insert
。这是行不通的,只是因为
insert
需要两个参数&插入对象的索引和插入对象。只需将其更改为
append(cnt[j])
,或
insert(0,cnt[j])
,或任何合适的选项

但是,如果
i
不在
dict
中,那么您正试图
附加到不存在的东西上。这显然行不通。您必须创建一个
列表
并将其放入
dict[i]
中,然后才能对
dict[i]
执行任何操作。因此,您可以将该行更改为:

    dict[i] = [cnt[j]]
…这就解决了

一旦你理解了这一点,你就有希望理解为什么Sukrit Kalla的答案如此酷:
defaultdict
就是一个
dict
,它会自动为任何不存在的键创建一个默认值。因此,您只需编写
dict[i].append(cnt[j])
,无论
dict[i]
是否已经存在,它都会起作用


作为旁注,命名dict
dict
是个坏主意,因为这隐藏了相同名称的内置类和构造函数

一般来说,使用更好的名字总是有帮助的。你用晦涩的缩写和一个字母的名字保存的击键会被你浪费在调试代码和向需要帮助的人解释代码上的击键所抵消。调用输入,如
words
counts
,调用外循环变量
word
,调用
j
计数器,如
count\u index
,等等


同时:
cnt
几乎完全没有用处。对于最大为10的任何数字,
cnt[j]
只是
j
,对于大于10的任何数字,它是一个
索引器。为什么不直接使用
j

您不需要创建计数器列表。Enumerate将为您完成以下任务:

list(enumerate(['i','am','am','the','boss','the','tiger','eats','rice','eats','grass']))
#=> [(0, 'i'), (1, 'am'), (2, 'am'), (3, 'the'), (4, 'boss'), (5, 'the'), (6, 'tiger'), (7, 'eats'), (8, 'rice'), (9, 'eats'), (10, 'grass')]
现在,您可以使用defaultdict收集这些数据:

collect = defaultdict(list)
for idx, wrd in enumerate(['i','am','am','the','boss','the','tiger','eats','rice','eats','grass']):
    collect[wrd].append(idx)

但是,真正的问题是你为什么需要这个。您打算如何将这些索引恢复到原始列表中?

您的代码中有什么问题?它有错误吗?它是否给出了错误的输出?@RohitJain:Error:dict[i].append(cnt[j])…keyrerror:“我非常感谢您简单明了的解决方案。