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 ステートメントを使用して、IF が文字列か 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):

これには次の 2 つの問題があります。

  • 「名前」フィールドのタイプではなく、を比較しています
  • あなたはそれを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 に答える