Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否根据长度将值附加到字典?_Python - Fatal编程技术网

Python 是否根据长度将值附加到字典?

Python 是否根据长度将值附加到字典?,python,Python,我有一个列表uarfcnrssi2和一个列表字典band2。然后,我在某些条件下将uarfcnrssi2中的值添加到band2,如下所示: uarfcnrssi2=[[10564, 20, 1],[10637, 26, 1], [10662, 32, 1], [10712, 26, 1], [10837, 15, 1], [10837, 17, 1], [2, 10, 13], [3, 18, 13], [44, 12, 13], [10564, 27, 13], [49, 15, 13],

我有一个列表
uarfcnrssi2
和一个列表字典
band2
。然后,我在某些条件下将uarfcnrssi2中的值添加到band2,如下所示:

uarfcnrssi2=[[10564, 20, 1],[10637, 26, 1], [10662, 32, 1], [10712, 26, 1], [10837, 15, 1], [10837, 17, 1],
 [2, 10, 13], [3, 18, 13], [44, 12, 13], [10564, 27, 13], [49, 15, 13], [64, 20, 13], [66, 19, 13], [976, 27, 13], [981, 21, 13], [982, 20, 13], [985, 13, 13], [988, 13, 13], [788, 12, 11]]      

band2= {'channel1': 10564, 'channel2': 10589, 'channel3': 10612, 'channel4': 10637,'channel5': 10662, 'channel6': 10687,
'channel7': 10712, 'channel8': 10737, 'channel9': 10762, 'channel10': 10787,'channel11': 10812, 'channel12': 10837, }
var1 = 5
var2 = -190
band2 = {k: [v, v/var1, v/var1+var2] for k, v in band2.iteritems()
{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922, 20], 'channel7': [10712, 2142, 1952, 26], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942, 32], 'channel4': [10637, 2127, 1937, 26], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977, 15]}   
代码:

for k, v in band2.items():
    for i in uarfcnrssi2:
        if v[0] == i[0] and i[2] == 1 and len(v)<=3:
            band2[k].append(i[1])
{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922, 20], 'channel7': [10712, 2142, 1952, 26], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942, 32], 'channel4': [10637, 2127, 1937, 26], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977, 15]}   
但是,对于我没有在列表中添加第四项的列表,我希望在每个列表的末尾添加
0
,我可以再次循环执行此操作,但是有没有办法编辑上面的代码来执行此操作

{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922, 20], 'channel7': [10712, 2142, 1952, 26], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942, 32], 'channel4': [10637, 2127, 1937, 26], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977, 15]}   
编辑:我想改进的方式

{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922, 20], 'channel7': [10712, 2142, 1952, 26], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942, 32], 'channel4': [10637, 2127, 1937, 26], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977, 15]}   
for k, v in band2.items():
    for i in uarfcnrssi2:
        if v[0] == i[0] and i[2] == 1 and len(v)<=3:
            band2[k].append(i[1])

for k, v in band2.items():
    if len(v) <=3:
        band2[k].append(0)
print band2  

好的,我现在明白了。我认为您可以将两个循环组合起来,如下所示:

{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922, 20], 'channel7': [10712, 2142, 1952, 26], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942, 32], 'channel4': [10637, 2127, 1937, 26], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977, 15]}   
for v in band2.values():
    for i1, i2, i3 in uarfcnrssi2:
        if v[0] == i0 and i2 == 1 and len(v) <= 3:
            v.append(i1)
    if len(v) <= 3: # never matched any list values, so add zero instead
        v.append(0)
带2中v的
值()
对于uarfcnrssi2中的i1、i2、i3:

如果v[0]==i0和i2==1和len(v),则显示的代码将无法工作,除非
band2
已将列表作为值,但您使用单个
int
值来显示它。这是个错误吗?谢谢,我补充了几行遗漏的内容。谢谢,我当然会用更好的名字;这不是一个例子:)您的代码没有按预期工作,我想在len确定时附加0,我想我不明白您想做什么。你能用更多关于你在不同情况下期望得到什么的信息来更新这个问题吗?例如,您能否显示一个简短的示例列表和字典,其中一些值较短(因此将被附加到),而另一些值较长(因此将被跳过)?请显示两种情况下所需的输出!如您所见,我已经附加了最终输出应该是什么,如果没有相应的值添加到列表中,则添加了0。例如,10787在字典中,但不在列表中,因此我必须在该条目中添加一个0。我按照实际操作的方式进行了编辑,以使其更清晰。@Paul:我更新了我的答案,我认为这对您有用。改进的空间比我之前给出答案时想象的要小,但仍有一些方法可以让事情比你所拥有的更好。