1

我有几个字典集,每个字典都有相同的键和不同的定义。

尝试编写一个函数来确定键的定义是字符串还是列表。

一直打印什么...

lloyd = {
    "name": "Lloyd",
    "homework": [90.0, 97.0, 75.0, 92.0],
    "quizzes": [88.0, 40.0, 94.0],
    "tests": [75.0, 90.0]
}
alice = {
    "name": "Alice",
    "homework": [100.0, 92.0, 98.0, 100.0],
    "quizzes": [82.0, 83.0, 91.0],
    "tests": [89.0, 97.0]
}
tyler = {
    "name": "Tyler",
    "homework": [0.0, 87.0, 75.0, 22.0],
    "quizzes": [0.0, 75.0, 78.0],
    "tests": [100.0, 100.0]
}

students = [lloyd,alice,tyler]

def compute_grades(ourstudents):
    for item in ourstudents:
        if item["name"] == type(str):
            print "YES"

compute_grades(students)

在这种情况下,如何使用 if 语句来确定它是字符串还是列表?

4

3 回答 3

5

使用isinstance

>>> isinstance("foo", str) #Use basestring in py2.x
True
>>> isinstance([1, 2, 3], list)
True
于 2013-09-07T04:19:34.473 回答
2
if item["name"] == type(str):

这有两个问题:

  • 您正在比较“名称”字段的,而不是类型
  • 您正在将其与str;的类型进行比较 str 本身是字符串类型,type(str)类型类型也是如此,如您在此处看到的:

    >>> type("Alice")
    <type 'str'>
    >>> str
    <type 'str'>
    >>> type(str)
    <type 'type'>
    

由此可见,"Alice" == type(str)一定是假的。

如果需要,在 python 中检查类型的首选方法是使用isinstance(<value>, <type>); 例如:

>>> isinstance("Alice", str)
True
于 2013-09-07T04:24:53.377 回答
1

适用type于比较的另一个参数。

if type(item["name"]) == str:
于 2013-09-07T04:20:49.903 回答