Я не владею английским языком, поэтому я склонен использовать либо 1, либо 0, либо 1 и 0. Использование «Y» и «N» имеет мало смысла, если вы не кодируете на английском языке (да, кодировка на родном языке существует). Использование «SI» и «NO» или «S» и «N» не выглядит профессиональным (точно так же, как именование переменных с акцентированными буквами). Напротив, ноты и ноль довольно стандартизированы, если вы закодированы в C, PHP или JavaScript. В любом случае, я всегда добавляю соответствующее ограничение, чтобы запретить любой другой символ. Помимо субъективных проблем, я не думаю, что при выборе CHAR или NUMBER заметно увеличение производительности. Мне нравятся номера немного больше, потому что мне не нужно их процитировать:)
Я согласен, что это вопиющее упущение, но я читал серьезно горячие дискуссии по этому вопросу на некоторых форумах Oracle; это своего рода религиозная проблема. Некоторые утверждают, что булевы относятся к типам данных приложения и не имеют места в ядре базы данных. Честно говоря, я считаю, что это один из тех, кого мы так долго не знали, что мы лучше говорили, что это было по назначению.
Кстати, у MySQL есть тип BOOLEAN, но это синоним TINYINT (1 ), поэтому он в конечном итоге равен 1 и 0; что хорошо, потому что он также имеет константы TRUE и FALSE, которые оценивают 1 и 0.
Для Python 2.7.x
inv_map = {v: k for k, v in my_map.iteritems()}
для Python 3 +:
inv_map = {v: k for k, v in my_map.items()}
Если значения в my_map
не уникальны:
inv_map = {}
for k, v in my_map.iteritems():
inv_map[v] = inv_map.get(v, [])
inv_map[v].append(k)
Предположение, что значения в dict уникальны:
dict((v, k) for k, v in my_map.iteritems())
Попробуйте это:
inv_map = dict(zip(my_map.values(), my_map.keys()))
(Отмечают, что документы Python о представлениях словаря явно гарантия, которые .keys()
и .values()
имеют их элементы в том же порядке, который позволяет подходу выше работать.)
, Кроме того:
inv_map = dict((my_map[k], k) for k in my_map)
или Python использования 3.0's dict понимания
inv_map = {my_map[k] : k for k in my_map}
Чтобы сделать это с сохранением типа отображения (предполагается, что это подкласс dict
или dict
):
def inverse_mapping(f):
return f.__class__(map(reversed, f.items()))
Если значения не уникальны, и вы немного хардкор:
inv_map = dict(
(v, [k for (k, xx) in filter(lambda (key, value): value == v, my_map.items())])
for v in set(my_map.values())
)
Обратите внимание, особенно для большого словаря, это решение намного меньше эффективнее, чем ответ Python реверсирует / инвертирует отображение , потому что он многократно перебирает items ()
.