如何从列表中存储值的python字典中的键中删除值

时间:2019-10-10 11:02:53

标签: python dictionary

我想从单个键的值中删除特定元素。

adj_city = {

'WA': ['NT','SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}

for i in adj_city['WA'] :
    if(i=='NT'):
        del(i)

我期望输出为'WA':['SA'],但是运行上述代码后,我没有得到输出

5 个答案:

答案 0 :(得分:2)

如果要删除NT值,请使用remove,切勿同时迭代和删除:

adj_city = {

'WA': ['NT','SA'],
'NT': ['WA','SA','Q'],
'SA': ['WA','NT','NSW','V'],
'Q' : ['NT', 'NSW'],
'NSW': ['Q','SA','V'],
'V': ['SA','NSW']
}

adj_city['WA'].remove('NT')

print(adj_city['WA'])

输出

['SA']

答案 1 :(得分:1)

要了解为什么您的代码不起作用,请尝试理解以下代码:

arr = [1, 2, 3]

for val in arr:
    del val

    try:
        val
    except NameError as e:
        print(e)

    print(arr)

输出:

name 'val' is not defined
[1, 2, 3]
name 'val' is not defined
[1, 2, 3]
name 'val' is not defined
[1, 2, 3]

观察:

  • 变量val被删除(即不再可用),但arr未被触及。

只需使用列表理解:

adj_city = {
    'WA': ['NT','SA'],
    'NT': ['WA','SA','Q'],
    'SA': ['WA','NT','NSW','V'],
    'Q' : ['NT', 'NSW'],
    'NSW': ['Q','SA','V'],
    'V': ['SA','NSW']
}

adj_city["WA"] = [city for city in adj_city["WA"] if city != 'NT'] 

assert adj_city == {
    'WA': ['SA'],
    'NT': ['WA','SA','Q'],
    'SA': ['WA','NT','NSW','V'],
    'Q' : ['NT', 'NSW'],
    'NSW': ['Q','SA','V'],
    'V': ['SA','NSW']
}

答案 2 :(得分:0)

使用列表理解

例如:

adj_city = {
    'WA': ['NT','SA'],
    'NT': ['WA','SA','Q'],
    'SA': ['WA','NT','NSW','V'],
    'Q' : ['NT', 'NSW'],
    'NSW': ['Q','SA','V'],
    'V': ['SA','NSW']
}

adj_city["WA"] = [i for i in adj_city["WA"] if i != 'NT'] 
print(adj_city)

输出:

{'NSW': ['Q', 'SA', 'V'],
 'NT': ['WA', 'SA', 'Q'],
 'Q': ['NT', 'NSW'],
 'SA': ['WA', 'NT', 'NSW', 'V'],
 'V': ['SA', 'NSW'],
 'WA': ['SA']}

注意:在迭代对象时删除元素不是一个好习惯。

答案 3 :(得分:0)

你可以去

adj_city = {
    'WA': ['NT','SA'],
    'NT': ['WA','SA','Q'],
    'SA': ['WA','NT','NSW','V'],
    'Q' : ['NT', 'NSW'],
    'NSW': ['Q','SA','V'],
    'V': ['SA','NSW']
}

# keys where the values need to be removed
dict_keys = ['WA']

# values to be removed
unwanted_values = ['NT']

for key in dict_keys:
    try:
        adj_city[key] = [item 
                         for item in adj_city[key] 
                         if not item in unwanted_values]
    except KeyError:
        pass

print(adj_city)

哪个产量

{
    'WA': ['SA'], 
    'NT': ['WA', 'SA', 'Q'], 
    'SA': ['WA', 'NT', 'NSW', 'V'], 
    'Q': ['NT', 'NSW'], 
    'NSW': ['Q', 'SA', 'V'], 
    'V': ['SA', 'NSW']
}

答案 4 :(得分:-1)

首先,您正在使用library(spatstat) #> Loading required package: spatstat.data #> Loading required package: nlme #> Loading required package: rpart #> #> spatstat 1.61-0.021 (nickname: 'New improved formula') #> For an introduction to spatstat, type 'beginner' X <- runifpoint(20, nsim = 250) h <- hyperframe(ppp = X, group = rep(1:5, each=50)) studpermu.test(h, ppp ~ group) #> #> Studentized permutation test for grouped point patterns #> ppp ~ group #> 5 groups: 1, 2, 3, 4, 5 #> summary function: Kest, evaluated on r in [0, 0.25] #> test statistic: T, 999 random permutations #> #> data: h #> T = 3.6133, p-value = 0.125 #> alternative hypothesis: not the same K-function 数据类型。因此,您可以通过键名(dict来调用所需列表。

打印WA时,您会得到adj_city['WA']。这个返回的对象是一个列表。使用列表操作['NT','SA'],删除不需要的列表项。

remove