【问题标题】:Python for loop zip function has more output dictionaries than input keys from old dictionariesPython for loop zip 函数的输出字典比旧字典的输入键多
【发布时间】:2020-06-19 17:48:28
【问题描述】:

我有许多字典,都具有相同的键。每个字典由许多具有整数值的列表组成。我想对字典中的每个列表执行一个功能,并将新列表存储在一组新字典中,并使用旧字典中使用的相同键。

我正在考虑使用 for 循环和 zip 函数。但是在 for 循环中,用于访问旧字典中列表的键数(即下面代码中的 key1、key2 ... key4)少于将存储在新字典中的列表数,所以我不知道如何将新列表(即 x_scaler、y_scaler)分配给前两个字典(即 x_scaler_dic 和 y_scaler_dic)。

x_scaler_dic = {}
y_scaler_dic = {}
x_train_scaled_dic = {}
x_test_scaled_dic = {}
y_train_scaled_dic = {}
y_test_scaled_dic = {}

for key1, key2, key3, key4) in zip(x_train_dic, x_test_dic, y_train_dic, y_test_dic):
    x_scaler, y_scaler, x_train_scaled, x_test_scaled, y_train_scaled, y_test_scaled = scale(x_train_dic[key1], x_test_dic[key2], y_train_dic[key3], y_test_dic[key4])
    x_scaler_dic[key?], y_scaler_dic[key?], x_train_scaled_dic[key1], x_test_scaled_dic[key2], y_train_scaled_dic[key3], y_test_scaled_dic[key4] = x_scaler, y_scaler, x_train_scaled, x_test_scaled, y_train_scaled, y_test_scaled

scale 是一个缩放旧字典列表的函数。我在上面的代码中添加了问号,表示我不知道这些字典的键应该是什么。

感谢您的帮助!

【问题讨论】:

  • 不清楚你想要实现什么。很明显,如果所有字典都有相同的键,则不需要压缩字典。将字典传递给zip 与传递字典的键相同。键的顺序甚至不能保证相同,所以压缩只会增加混乱。只需遍历一个字典的键,然后根据键对所有字典进行操作。
  • 分配给字典的列表是什么意思?
  • 嗨,阿米泰·艾尔隆。我想对旧词典中的列表(即 x_train_dic、x_test_dic、y_train_dic、y_test_dic)执行一个函数来创建一组新列表。这组新列表具有旧字典中的相同键。我尝试使用带有 zip 函数的 for 循环,该函数为每个旧字典使用多个键(即 key1、key2 ... key 4)。但是,for 循环中的键数少于为新字典创建的列表。您知道我如何将这些新列表分配给新字典 - 甚至可以不使用 zip 功能吗?
  • 你好 komatiraju032。对困惑感到抱歉。我的意思是说我想用旧字典中的相同键将新创建的列表(即 for 循环的第一行:x_scaler、y_scaler、x_train_scaled、x_test_scaled、y_train_scaled、y_test_scaled)添加到新字典中。但是,for 循环中的键数量(例如 key1)少于循环中创建的新列表的数量。那么您知道如何将这些新列表分配给新字典吗?
  • 阿米泰·艾伦,你的建议奏效了。我在 for 循环中使用了一本字典的键,并且有效。谢谢。

标签: python dictionary for-loop zip


【解决方案1】:

我设法回答了我自己的问题。正如 Amitar Irron 所建议的,如果字典具有相同的键,则可以使用一个字典的键。最终代码:

x_scaler_dic = {}
y_scaler_dic = {}
x_train_scaled_dic = {}
x_test_scaled_dic = {}
y_train_scaled_dic = {}
y_test_scaled_dic = {}

for key in x_train_dic:
    x_scaler, y_scaler, x_train_scaled, x_test_scaled, y_train_scaled, y_test_scaled = scale(x_train_dic[key], x_test_dic[key], y_train_dic[key], y_test_dic[key])
    x_scaler_dic[key], y_scaler_dic[key], x_train_scaled_dic[key], x_test_scaled_dic[key], y_train_scaled_dic[key], y_test_scaled_dic[key] = x_scaler, y_scaler, x_train_scaled, x_test_scaled, y_train_scaled, y_test_scaled

print(x_scaler_dic.keys())
print(y_scaler_dic.keys())
print(x_train_scaled_dic.keys())
print(x_test_scaled_dic.keys())
print(y_train_scaled_dic.keys())
print(y_test_scaled_dic.keys())

print result:
dict_keys(['FNS', 'Ohara'])
dict_keys(['FNS', 'Ohara'])
dict_keys(['FNS', 'Ohara'])
dict_keys(['FNS', 'Ohara'])
dict_keys(['FNS', 'Ohara'])
dict_keys(['FNS', 'Ohara'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2021-07-28
    • 1970-01-01
    • 2017-10-28
    • 2016-05-25
    • 2010-11-22
    相关资源
    最近更新 更多