сопоставление ключей из словаря и создание списков со связанными значениями - PullRequest
0 голосов
/ 03 мая 2020

Я новичок в python и у меня проблема. В основном у меня есть два словаря с глубиной в качестве ключа и соответствующей концентрацией pH / H2 в качестве значений.

Теперь я хочу создать два новых списка со значениями pH и H2, состоящими из значений, взятых из двух словарей. Я хочу принимать значения pH и H2 только тогда, когда глубина в словаре 1 равна глубине 1 + 6000 в словаре 2. Так, например, Глубина 1 = 4000, тогда Глубина 2 будет 4000 + 6000 = 10000, если выполняется это условие, то соответствующие значения pH и H2 будут включены в новые списки.

Поскольку я новичок в python, я понятия не имею, с чего начать. Я пробовал что-то вроде этого:

   """Aligning of profile data"""
#fill in height of cathode for both profiles
Dept_H2 = 36000
Depth_pH = 42000
#calculate Depth difference
D_diff = Depth_pH - Depth_H2
print(D_diff)
#create dictionaries for pH and H2
H2_M = (Input2['concentration (mol/L)'].to_list())
Depth_H2 = (Input2['Depth H2'].to_list())
pH_dict = dict(zip(Average_depth, Average_pH))
H2_dict = dict(zip(Depth_H2, H2_M))
print(pH_dict)
print(H2_dict)

#create new lists for pH and H2 concentration values
pH = []
H2_con = []

for keys in pH_dict.keys():
    print(keys)
    for base in range(0, len(pH_dict[keys])):
        if keys in H2_dict == (pH_dict.keys() + D_diff):
            pH.append(pH_dict.values())
            H2_con.append(H2_dict.values())                

При запуске этого я получаю следующую ошибку:

Traceback (most recent call last):
  File, line 42, in <module>
    for base in range(0, len(pH_dict[keys])):
TypeError: object of type 'numpy.float64' has no len()

Однако даже без этой ошибки я не думаю, что это будет работать. Любая подсказка о том, что я должен делать, будет принята с благодарностью

1 Ответ

0 голосов
/ 03 мая 2020
pH = []
H2_con = []
for pH_depth, pH_val in pH_dict.items():
    possible_match = H2_dict.get(pH_depth + D_diff)
    if possible_match is not None:
        pH.append(pH_val)    
        H2_con.append(possible_match)

Мы просматриваем ключи и значения pH_dict и ищем желаемое совпадение в H2_dict для каждой глубины в pH_dict. Метод словарей .get обрабатывает первый аргумент как ключ и возвращает соответствующее значение, если оно существует; в противном случае возвращается None (или второй аргумент, если он указан). Затем мы проверяем существование и добавляем.

Если у вас 3.8+, вы можете использовать оператор walrus вместо отдельной инициализации и проверки possible_match:

...
for pH_depth, pH_val in pH_dict.items():
    if possible_match := H2_dict.get(pH_depth + D_diff):
        ...

Вы также можете go для списочных понятий, но 2 списка заставляют меня не:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...