Я нахожу, что приведенные ответы действительно длинны, поэтому суммируем:
Расширение mysqli имеет ряд преимуществ, ключевые улучшения над расширением mysql:
- Объектно-ориентированный интерфейс
- Поддержка подготовленных выражений
- Поддержка нескольких операторов
- Поддержка транзакций
- Расширенные возможности отладки
- Поддержка встроенного сервера
Источник: Обзор MySQLi
Как объясняется выше ответы, альтернативы mysql - это mysqli и PDO (объекты данных PHP).
- API поддерживает серверные подготовленные заявления: поддерживается в MYSQLi и PDO
- API поддерживает клиент- сторонние Подготовленные утверждения: поддерживается только PDO
- API поддерживает хранимые процедуры: API MySQLi и PDO
- поддерживает множественные выражения и все функциональные возможности MySQL 4.1+ - поддерживается MySQLi и в основном также PDO
Оба MySQLi и PDO были представлены d в PHP 5.0, тогда как MySQL был представлен до PHP 3.0. Следует отметить, что MySQL включен в PHP5.x, хотя он устарел в более поздних версиях.
in
- это предполагаемый способ проверить наличие ключа в dict
.
d = dict()
for i in xrange(100):
key = i % 10
if key in d:
d[key] += 1
else:
d[key] = 1
Если вы хотите по умолчанию, вы всегда можете использовать dict.get()
:
d = dict()
for i in xrange(100):
key = i % 10
d[key] = d.get(key, 0) + 1
... и если вы хотите всегда обеспечить значение по умолчанию для любого ключа, вы можете использовать defaultdict
из модуля collections
, например:
from collections import defaultdict
d = defaultdict(lambda: 0)
for i in xrange(100):
d[i % 10] += 1
... но в целом ключевое слово in
- лучший способ сделать это.
Для проверки вы можете использовать метод has_key()
if dict.has_key('key1'):
print "it is there"
Если вы хотите получить значение, вы можете использовать метод get()
a = dict.get('key1', expeced_type)
Если вы хотите кортеж или список или словарь или любую строку в качестве значения по умолчанию в качестве возвращаемого значения, затем используйте метод get()
a = dict.get('key1', {}).get('key2', [])
Способы получения результатов:
Что лучше зависит от 3 вещей:
Подробнее: http://paltman.com/try-except-performance-in-python-a-simple-test/
Использование try / block вместо 'in' или 'if':
try:
my_dict_of_items[key_i_want_to_check]
except KeyError:
# Do the operation you wanted to do for "key not present in dict".
else:
# Do the operation you wanted to do with "key present in dict."
Использование тернарного оператора:
message = "blah" if 'key1' in dict else "booh"
print(message)
Вам не нужно вызывать клавиши:
if 'key1' in dict:
print "blah"
else:
print "boo"
Это будет намного быстрее , поскольку он использует хеширование словаря, а не выполняет линейный поиск, который вызывает клавиши будут делать.
Я бы рекомендовал вместо этого использовать метод setdefault
. Похоже, он сделает все, что вы захотите.
>>> d = {'foo':'bar'}
>>> q = d.setdefault('foo','baz') #Do not override the existing key
>>> print q #The value takes what was originally in the dictionary
bar
>>> print d
{'foo': 'bar'}
>>> r = d.setdefault('baz',18) #baz was never in the dictionary
>>> print r #Now r has the value supplied above
18
>>> print d #The dictionary's been updated
{'foo': 'bar', 'baz': 18}
Словарь в python имеет метод get ('key', default). Таким образом, вы можете просто установить значение по умолчанию, если нет ключа.
values = {...}
myValue = values.get('Key', None)
Вы можете использовать метод has_key ():
if dict.has_key('xyz')==1:
#update the value for the key
else:
pass
Или метод dict.get
для установки значения по умолчанию, если не найден:
mydict = {"a": 5}
print mydict["a"] #prints 5
print mydict["b"] #Throws KeyError: 'b'
print mydict.get("a", 0) #prints 5
print mydict.get("b", 0) #prints 0
print dict.get('key1', 'blah')
Не будет печатать boo для значений в dict, но выполнит цель, напечатав значение key1, чтобы подтвердить его существование.
Вы можете сократить это:
if 'key1' in dict:
...
Однако это в лучшем случае косметическое улучшение. Почему вы считаете, что это не лучший способ?
Я использую try / except ; если исключение выбрано, то ключ отсутствует в словаре. пример:
st = 'sdhfjaks'
d = {}
try:
print d['st']
except Exception, e:
print 'Key not in the dictionary'
Просто добавление FYI к Крису. B (лучший ответ):
d = defaultdict(int)
Также работает; причина в том, что вызов int()
возвращает 0
, что является тем, что defaultdict
делает за кулисами (при построении словаря), отсюда и название «Factory Function» в документации.
Вы можете проверить наличие ключа в словаре, используя ключевое слово в :
d = {'a': 1, 'b': 2}
'a' in d # <== evaluates to True
'c' in d # <== evaluates to False
. Обычное использование для проверки наличия ключа в словарь перед его изменением - по умолчанию - инициализировать значение (например, если ваши значения являются списками, например, и вы хотите убедиться, что существует пустой список, к которому вы можете добавить при вставке первого значения для ключа). В таких случаях вы можете найти интересующий вас тип collections.defaultdict()
.
В более раннем коде вы также можете найти некоторые функции has_key()
, устаревшие метод проверки наличия ключей в словарях (используйте вместо этого key_name in dict_name
).
Хорошо. Вы будете знакомы с тем, что поиск существования элемента в списке или данных означает все, что угодно (по крайней мере для неупорядоченного списка, например, dict.keys). Вместо этого вместо использования Исключения и Ошибок, которые возникают обычно, мы можем избежать этой сложности ...
d={1:'a',2:'b'}
try:
needed=d[3]
print(needed)
except:
print("Key doesnt exist")
Словарь Python имеет метод, называемый __contains__
. Этот метод вернет True, если словарь имеет ключ else, возвращает False.
>>> temp = {}
>>> help(temp.__contains__)
Help on built-in function __contains__:
__contains__(key, /) method of builtins.dict instance
True if D has a key k, else False.
Как насчет использования EAFP (проще просить прощения, чем разрешения):
try:
blah = dict["mykey"]
# key exists in dict
except KeyError:
# key doesn't exist in dict
См. другие сообщения SO:
Самый простой - узнать, какой ключ (имя ключа) должен искать:
# suppose your dictionary is
my_dict = {'foo': 1, 'bar': 2}
# check if a key is there
if 'key' in my_dict.keys(): # it will evaluates to true if that key is present otherwise false.
# do something
, или вы также можете сделать это как:
if 'key' in my_dict: # it will evaluates to true if that key is present otherwise false.
# do something
Почему бы просто не использовать метод has_key ().
a = {}
a.has_key('b') => #False
a['b'] = 8
a.has_key('b') => #True
Дополнительная информация о скорости выполнения предложенных методов принятого ответа (петли 10 м):
'key' in mydict
прошедшее время 1.07 сек mydict.get('key')
Истекшее время 1.84 сек mydefaultdict['key']
прошедшее время 1.07 сек Поэтому использование in
или defaultdict
рекомендуется против get
.