在python中遍历列表时抛出错误

2024-09-30 20:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python3的新手。我有这样的要求:

function : predictRisk
Parameters :
1 :
positional / keyword
type dicitionary
Note : return value of function prepareData
2 :
Risk Zones
Type : lists
returns riskiness of that person based on the places s/he has visited. If a person has visited a place which is identified to be in risk zones, then the person should be quarantined for at least 14 days.

所以,我试着这样:

def predictRisk(**k):
    x = k['visited']
    print(x)
    riskzones = ['kapan', 'chabail', 'newroad']
    for i in riskzones:
        for k,v in x:
          if v == i:
            return 'You are in danger zone'
          else:
            return 'You are not in danger zone'

对于第二个参数,我需要传递列表,所以我尝试, xyz列表在这里不起作用,我用这种方式删除了它

 def predictRisk(**k,xyz=[]):
        x = k['visited']
        print(x)
        riskzones = ['kapan', 'chabail', 'newroad']
        for i in riskzones:
            for k,v in x:
              if v == i:
                return 'You are in danger zone'
              else:
                return 'You are not in danger zone'

所以,我试着:

k=prepareData('arun','nepali',location1='chabail',location2='kathmandu')
print(k)
predictRisk(**k)

但是,我得到的错误是:

{'name': 'arun', 'national': 'nepali', 'visited': [{'location1': 'chabail'}, {'location2': 'kathmandu'}]}
[{'location1': 'chabail'}, {'location2': 'kathmandu'}]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-119-fabcf7206f8b> in <module>
      2 print(k)
      3 
----> 4 predictRisk(**k)

<ipython-input-117-82fada056b90> in predictRisk(**k)
      4     riskzones = ['kapan', 'chabail', 'newroad']
      5     for i in riskzones:
----> 6         for k,v in x:
      7           if v == i:
      8             return 'You are in danger zone'

ValueError: not enough values to unpack (expected 2, got 1)

为什么会出现此错误?我搜索了答案,但找不到正确的答案。调用riskzones = ['kapan', 'chabail', 'newroad']时是否也可以将列表作为参数传递predictRisk()?


Tags: inyouzoneforreturndangerareperson
3条回答

哦,天哪!这很糟糕:

def predictRisk(**k,xyz=[]):

1切勿将可变对象用作参数默认值。它们在函数调用之间保持状态!这会给你带来一些无法定位的bug。使用以下命令:

def predictRisk(**k, xyz=None):
    if xyz is None:
        xyz = []

2将args和kwargs放在签名的最后。否则k会抓住一切。(另外,旁注,写出kwargs这个词真的有那么多努力吗?一个字母的变量是……啊

def predictRisk(xyz=None, **kwargs):

    if xyz is None:
        xyz = []

这是Python,请用蛇壳

def predict_risk(xyz=None, **kwargs):
    if xyz is None:
        xyz = []

这应该已经改善了一些事情

如您所见,x等于[{'location1': 'chabail'}, {'location2': 'kathmandu'}]

for k,v in x将无法检索键和值

尝试:

    for i in riskzones:
        for k,v in {k:v for d in x for k,v in d.items()}.items():
          if v == i:
            return 'You are in danger zone'
          else:
            return 'You are not in danger zone'

由于x而导致的错误不是dict类型

def predictRisk(**k):
    x = k['visited']
    riskzones = ['kapan', 'chabail', 'newroad']
    for i in riskzones:
        for v in [_.values()[0] for _ in x]:
          if v == i:
            return 'You are in danger zone'
          else:
            return 'You are not in danger zone'





k = {'name': 'arun', 'national': 'nepali', 'visited': [{'location1': 'chabail'}, {'location2': 'kathmandu'}]}

print(predictRisk(**k))

相关问题 更多 >