我有:
ListOne = ['foo', 'bar', ..]
我现在想通过使用ListTwo压缩ListOne来创建一个新的List。 ListTwo看起来像这样:
ListTwo = [{count, 1},{count, 1},{count,1}, ..]
动态生成ListTwo的好方法是什么?每个列表项都是相同的。
我想将zip的结果提供给dict:from_list
。所以也许拉链不是最好的方法。
答案 0 :(得分:4)
虽然您的问题可能更具体,但我的猜测是您希望使用字典来存储值为计数器的键值对。你想通过问这个来实现的是如何在计数器设置为1的情况下初始化dict。
下面的代码将创建一个新的dict,其中键是ListOne的键,值为1:
ListOne = [foo, bar, baz, quux].
D1 = dict:from_list([{Elem, 1} || Elem <- ListOne]).
现在,要增加这些计数器,您可以使用dict:update_counter/3
:
D2 = dict:update_counter(foo, 1, D1).
要递减,您只需给出一个负数作为增量。
值得注意的是,dict:update_counter/3
将在dict中创建密钥(如果它尚未存在),并以给定的增量作为初始值。
答案 1 :(得分:3)
我不是,如果这是你正在寻找的东西,但如果ListTwo是这样的:[{count,1},{count,1},.....]你可以生成它:
ListTwo = [{count, 1} || _X <- lists:seq(1,5)].
我认为ListTwo的每个参数都是一个元组,因此你应该将这两个值与“,”分开......否则,如果你的例子是正确的,你可以做一些事情:
ListTwo = [{'count:1'} || _X <- lists:seq(1,5)].
显然你应该为你的列表大小选择合适的范围(在我的例子中从1到5)