Словари в Python

В ядре .NET вы должны делать это на уровне HttpClient, а не использовать объект ServicePointManager, например,

https://stackoverflow.com/a/44540071/1538039

Я ответил на похожий вопрос на этот вопрос здесь - https://stackoverflow.com / a / 55358543/1538039

Несмотря на то, что вы можете обойти проверку таким образом, неправильный подход, если вы управляете сервером. Вы в основном говорите: «Я настроил сервер так, что мой клиент не может установить доверие, потому что он не доверяет цепочке сертификатов. Чтобы обойти это, я собираюсь принять все ошибки, добавив некоторый код »

Лучшее решение - настроить сервер с сертификатом, которому клиент может доверять, и тогда все будет просто работать [ 1110]!

Во время разработки, работая локально, если вы хотите использовать самозаверяющий сертификат, вы можете установить его в качестве корневого ЦС, и все должно работать как положено.

Как только вы попадаете на стадию, когда вы не контролируете клиента, вы, очевидно, не можете просить об этом людей. Единственное, что нужно сделать, это правильно настроить сервер с сертификатом, которому клиент может доверять, используя что-то вроде letsencrypt для генерации сертификата.

5
задан Eli Courtwright 10 March 2009 в 18:37
поделиться

9 ответов

Одно хорошее место для запуска путем получения iPython (easy_install ipython) затем вводя по абсолютному адресу вокруг с заполнением клавишей Tab, ? и dir:

In [2]: dir {}
------> dir({})

Out[2]: 
['__class__',
 ...
 'keys',
 'pop',
 'popitem',
 'setdefault',
 'update',
 'values']

In [3]: {}.update?
Type:       dict
Base Class: <type 'dict'>
String Form:    {}
Namespace:  Interactive
Length:     0
Docstring:
    dict() -> new empty dictionary.
    dict(mapping) -> new dictionary initialized from a mapping object's
        (key, value) pairs.
    dict(seq) -> new dictionary initialized as if via:
        d = {}
        for k, v in seq:
            d[k] = v
    dict(**kwargs) -> new dictionary initialized with the name=value pairs
        in the keyword argument list.  For example:  dict(one=1, two=2)

(просто, например)

Так или иначе, Ваша проблема с проверкой ключей, распространенных между этими двумя словарями: существует несколько вещей рассмотреть (возможно, взгляд на set класс?), но вот то, как я сделал бы это:

common_keys = [k for k in dict1 if k in dict2]

(т.е., "каждый ключ k в dict1, если тот ключ находится также в dict2") (отмечают также, что тестирование на членство в словаре является O (1) операция, таким образом, это будет работать в O (|dict1 |))

править: хорошо, таким образом, это не решает проблему слияния двух dicts в один со списками... Но ответ Lott хорош для этого, или Вы могли использовать setdefault метод:

new = {}
for (k, v) in dict1.items():
    new.setdefault(k, []).append(v)
for (k, v) in dict2.items():
    new.setdefault(k, []).append(v)
6
ответ дан 18 December 2019 в 06:13
поделиться

Попробуйте это:

import collections
merged = collections.defaultdict(list)
for k in d1:
   merged[k].append( d1[k] )
for k in d2:
   merged[k].append( d2[k] )

Это может быть тем, что Вы ищете.

Или возможно это.

import collections
merged = collections.defaultdict(set)
for k in d1:
   merged[k].add( d1[k] )
for k in d2:
   merged[k].add( d2[k] )
13
ответ дан 18 December 2019 в 06:13
поделиться

Я верю, вот то, что Вы хотите:

>>> d1={'key1':1, 'key2':2}
>>> d2={'key1':1, 'key2':'A', 'key4':4}
>>> d = {}
>>> d.update(d1)
>>> for i in d2:
        if i in d and d2[i] != d[i]:
            d[i] = [d[i], d2[i]]
        else:
            d[i] = d2[i]            
>>> d
{'key2': [2, 'A'], 'key1': 1, 'key4': 4}
4
ответ дан 18 December 2019 в 06:13
поделиться
2
ответ дан 18 December 2019 в 06:13
поделиться

Словари Python также работают во многом как ассоциативные массивы в PHP, если у Вас есть опыт на том языке.

Встроенная страница Types в документах Python также имеет хороший раздел по словарям, и раздел также имеет список в наличии функций для них:

http://docs.python.org/library/stdtypes.html#mapping-types-dict

1
ответ дан 18 December 2019 в 06:13
поделиться

хорошо, для Вашего первого случая, Вы могли бы хотеть помощника, который комбинирует два объекта в список двух объектов и два списка в один список, содержащий объекты из двух списков,

Это принимает, конечно, что Вы всегда объединяете ключи в списки, но Вы не хотите, чтобы Ваши ключи закончили тем, что были "списками списков"

def listify( obj ): 
   if type(obj) != type([]): return [obj]
   else: return obj

def merge( v1, v2 ):
    return listify(v1) + listify(v2)

#so now you can merge two dictionaries:
dict1 = dict(a = 2, b = 5, c = 7 )
dict2 = dict(b = 4, d = 9, f = 10 )
dikt = {}

for k in set( dict1.keys() + dict2.keys() ):
    dikt[k] = merge( dict1.get(k, []), dict2.get(k, []) )
#resutls in:
# {'a': [2], 'c': [7], 'b': [5, 4], 'd': [9], 'f': [10]}

Можно заметить, dict.keys() возвращает список ключей, set возвращает список без дублирующихся объектов, таким образом, set( d1.keys(), d2.keys() ) объединение возвратов ключей d1 и d2

0
ответ дан 18 December 2019 в 06:13
поделиться

Вариация на ответ @SilentGhost (все другие ответы производят неправильные словари):

>>> d1 = dict(key1=1, key2=2)
>>> d2 = dict(key1=1, key2='A', key4=4)
>>> d = dict(d1)
>>> for k, v2 in d2.iteritems():
...     v = d.get(k, None)
...     d[k] = [v, v2] if v is not None and v != v2 else v2
...
>>> d
{'key2': [2, 'A'], 'key1': 1, 'key4': 4}
0
ответ дан 18 December 2019 в 06:13
поделиться

Возможно, это немного неудобно сделать, потому что структура данных, которую Вы пытаетесь создать, не является столь естественной, как это могло быть. Например, вместо того, чтобы иметь некоторые значения быть одинокими значениями и некоторыми быть списками, почему бы не сохранить все в списках? Например.

{'key1': [1], 'key2': [2, 'A'], 'key4': [4]}

Возможно в Python иметь набор смешанных типов данных, но Ваш код часто будет более чистым, если Вы сохраните это когерентным. При использовании этого вида структуры данных вставка так же легка как

# Inserting a (key, value) pair
if key in my_dict:
    my_dict[key].append(value)
else:
    my_dict[key] = [value]
0
ответ дан 18 December 2019 в 06:13
поделиться

Вот еще одна вариация.

d1 = {'key1'=1, 'key2'=2}
d2 = {'key1'=1, 'key2'='A', 'key4'=4)
d = d2
for k, v in d.iteritems():
... if k in d1.keys() and v!=d1[k]:
... d[k] = [d1[k], v2]
d
{'key2': [2, 'A'], 'key1': 1, 'key4': 4}
0
ответ дан 18 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

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