我是Python新手,我需要创建一个函数,将字典中列表中的值除以2:
choice = getchar();
} while ( choice != 'y' );
期望的输出:
if (sc2.charAt(0) != chr){ String[] parts = sc2.split(" ");
String[] parts2 = parts[1].split("=\"");
String[] parts3 = sc2.split(">");
nod = new Nod(parts2[1].substring(0, parts2[1].length() - 2), parts[0], parts3[1]);
// ar = new ArrayList<DefaultMutableTreeNode>();
for (int i = 0; i < nod.getDepth(); i++){ ar.add(nod); } }
我找到了这篇文章
python: iterating through a dictionary with list values
这有点帮助,但不幸的是我无法弄清楚的示例代码的“无论什么”部分。
我试过了:
dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
我写了不同的变体,但是我在“for j ...”行中得到了一个KeyError:0。
答案 0 :(得分:3)
看,理解的力量:
>>> dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
>>> dic2 = {k:[v/2 for v in vs] for k,vs in dic.items()}
>>> dic2
{'A': [1, 2, 3, 4], 'B': [2, 3, 4, 5]}
在外层有一个词典理解,而在内心层面有一个&#34;内部&#34; list comprehension用于划分每个列表中的值。
答案 1 :(得分:3)
那是因为dicts不像列表,它们不使用索引,它们使用键(如标签),并且有一个Python函数可以获取dict键(dict.keys()),编辑:(我'我现在正在使用 }
}
的常规Python迭代,所以:
in
如果您不想要小数点,请使用//代替/.
答案 2 :(得分:2)
您不一定要在字典上进行数字迭代 - 您的range(len(dic))
。 (你不应该以这种方式迭代列表。)这就是为什么dic[i]
不起作用的原因 - 没有dic[0]
。相反,迭代它的键。
def divide(dic):
dic2 = dic.copy()
for key, value in dic:
for i, _ in enumerate(value): # Enumerate gives the index and value.
dic2[key][i] = value[i]/2
return dic2
不可否认,理解是一种更好的方法,但这会保留你所做的形式,并说明问题所在。
答案 3 :(得分:2)
要轻松迭代字典,请使用字典中的键。使用列表理解
可以轻松地将列表除以2for k in dic1:
dic1[k] = [x / 2 for x in dic1[k]]
以函数形式
def divdict(d):
for k in d:
d[k] = [x/2 for x in d[k]]
答案 4 :(得分:2)
您必须使用密钥访问字典的元素。 在示例中,键是'A'和'B'。 您正尝试使用整数访问字典,这会为您提供范围错误。
以下功能有效:
def divide_dic(dic):
dic2 = {}
# Iterate through the dictionary based on keys.
for dic_iter in dic:
# Create a copy of the dictionary list divided by 2.
list_values = [ (x / 2) for x in dic[dic_iter] ]
# Add the dictionary entry to the new dictionary.
dic2.update( {dic_iter : list_values} )
return dic2
答案 5 :(得分:1)
您可以尝试使用lambda:
the_funct = lambda x: x/2
dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
new_dict = {a:map(the_funct, b) for a, b in dic.items()}
## for Python 3.5
new_dict = {a:[*map(the_funct, b)] for a, b in dic.items()}
lambda函数与map结合使用,map将迭代函数对字典值中的每个元素进行迭代。通过使用dict理解,我们可以将lambda应用于每个值。
答案 6 :(得分:0)
我在上面使用了Wim答案的细微变化(重点是对使用key
的理解):
dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
dic2 = {k:[v/2 for v in dic[k]] for k in dic.keys()}
获得:
dic2
{'A': [1.0, 2.0, 3.0, 4.0], 'B': [2.0, 3.0, 4.0, 5.0]}