Поле Пымонго существует сейчас - не ранее [дублировать]

Я нахожу, что приведенные ответы действительно длинны, поэтому суммируем:

Расширение 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, хотя он устарел в более поздних версиях.

2227
задан bluish 2 May 2013 в 07:45
поделиться

19 ответов

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 - лучший способ сделать это.

2278
ответ дан Chris B. 26 August 2018 в 06:38
поделиться

Для проверки вы можете использовать метод 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', [])
15
ответ дан abarisone 26 August 2018 в 06:38
поделиться

Способы получения результатов:

Что лучше зависит от 3 вещей:

  1. Словарь обычно имеет «ключ» или «обычно не имеет ключа».
  2. Вы собираетесь использовать такие условия, как if ... else ... elseif ... else?
  3. How big

Подробнее: 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."
12
ответ дан Bishwas Mishra 26 August 2018 в 06:38
поделиться

Использование тернарного оператора:

message = "blah" if 'key1' in dict else "booh"
print(message)
14
ответ дан Charitoo 26 August 2018 в 06:38
поделиться

Вам не нужно вызывать клавиши:

if 'key1' in dict:
  print "blah"
else:
  print "boo"

Это будет намного быстрее , поскольку он использует хеширование словаря, а не выполняет линейный поиск, который вызывает клавиши будут делать.

1116
ответ дан Community 26 August 2018 в 06:38
поделиться

Я бы рекомендовал вместо этого использовать метод 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}
40
ответ дан David Berger 26 August 2018 в 06:38
поделиться

Словарь в python имеет метод get ('key', default). Таким образом, вы можете просто установить значение по умолчанию, если нет ключа.

values = {...}
myValue = values.get('Key', None)
20
ответ дан Derlin 26 August 2018 в 06:38
поделиться

Вы можете использовать метод 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
11
ответ дан Eric Leschinski 26 August 2018 в 06:38
поделиться

print dict.get('key1', 'blah')

Не будет печатать boo для значений в dict, но выполнит цель, напечатав значение key1, чтобы подтвердить его существование.

6
ответ дан gounc86 26 August 2018 в 06:38
поделиться

Вы можете сократить это:

if 'key1' in dict:
    ...

Однако это в лучшем случае косметическое улучшение. Почему вы считаете, что это не лучший способ?

75
ответ дан Greg Hewgill 26 August 2018 в 06:38
поделиться

Я использую try / except ; если исключение выбрано, то ключ отсутствует в словаре. пример:

st = 'sdhfjaks'
d = {}
try:
    print d['st']
except Exception, e:
    print 'Key not in the dictionary'
0
ответ дан Leonardo Maffei 26 August 2018 в 06:38
поделиться

Просто добавление FYI к Крису. B (лучший ответ):

d = defaultdict(int)

Также работает; причина в том, что вызов int() возвращает 0, что является тем, что defaultdict делает за кулисами (при построении словаря), отсюда и название «Factory Function» в документации.

13
ответ дан Mauricio Morales 26 August 2018 в 06:38
поделиться

Вы можете проверить наличие ключа в словаре, используя ключевое слово в :

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).

228
ответ дан Michael Aaron Safyan 26 August 2018 в 06:38
поделиться

Хорошо. Вы будете знакомы с тем, что поиск существования элемента в списке или данных означает все, что угодно (по крайней мере для неупорядоченного списка, например, dict.keys). Вместо этого вместо использования Исключения и Ошибок, которые возникают обычно, мы можем избежать этой сложности ...

d={1:'a',2:'b'}
try:
    needed=d[3]
    print(needed)
except:
    print("Key doesnt exist")
2
ответ дан Seenivasan 26 August 2018 в 06:38
поделиться

Словарь 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.
3
ответ дан Siva Gnanam 26 August 2018 в 06:38
поделиться

Как насчет использования EAFP (проще просить прощения, чем разрешения):

try:
   blah = dict["mykey"]
   # key exists in dict
except KeyError:
   # key doesn't exist in dict

См. другие сообщения SO:

Использование try vs if in python или

Проверка существования элемента в Python

16
ответ дан Surest Texas 26 August 2018 в 06:38
поделиться

Самый простой - узнать, какой ключ (имя ключа) должен искать:

# 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
0
ответ дан Tasneem Haider 26 August 2018 в 06:38
поделиться

Почему бы просто не использовать метод has_key ().

a = {}
a.has_key('b') => #False

a['b'] = 8
a.has_key('b') => #True
-2
ответ дан wmorris 26 August 2018 в 06:38
поделиться

Дополнительная информация о скорости выполнения предложенных методов принятого ответа (петли 10 м):

  • 'key' in mydict прошедшее время 1.07 сек
  • mydict.get('key') Истекшее время 1.84 сек
  • mydefaultdict['key'] прошедшее время 1.07 сек

Поэтому использование in или defaultdict рекомендуется против get.

35
ответ дан Wtower 26 August 2018 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: