2013-09-07 2 views
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) 

Как я могу использовать, если заявление, в этом случае, чтобы определить, является ли это строка или, если это список?

ответ

5

isinstance Использование:

>>> isinstance("foo", str) #Use basestring in py2.x 
True 
>>> isinstance([1, 2, 3], list) 
True 
+0

Давайте дадим ему вихрь –

+0

Мне интересно ... is isstance для будущего развития конца, когда меняются всевозможные вещи? –

+0

if isinstance (item, str) == True: –

1

Применить type к другой аргумент сравнения.

if type(item["name"]) == str: 
+0

GJ. Итак, isinstance отличается от типа? –

+0

@NicholasHazel: Да. 'isinstance' также проверяет, имеет ли объект производный класс. Сравнение с 'type' проверяет, является ли это экземпляром одного и того же класса. –

+0

.. очень хорошо положительный сэр. Спасибо –

2
if item["name"] == type(str): 

Там две вещи неправильно с этим:

  • вы сравниваете значение , а не тип, в поле "Имя"
  • вы сравнивающие его тип str; strсам строкового типа, так type(str) типа типа, как вы можете увидеть здесь:

Исходя из этого, вы можете увидеть, что "Alice" == type(str) должен быть ложными.

Предпочтительный способ проверки типов в python, если вам нужно, - использовать isinstance(<value>, <type>); например:

>>> isinstance("Alice", str) 
True 
+0

if isinstance (item, str) == True: –

+0

Что случилось с этим? –

+0

Как 'A == True' истинно, если A истинно, а false, если A является ложным, выражение' A == True' является таким же, как 'A' для boolean A. – Hyperboreus

Смежные вопросы