RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1599918
Accepted
Dato Dato
Dato Dato
Asked:2024-11-16 08:01:38 +0000 UTC2024-11-16 08:01:38 +0000 UTC 2024-11-16 08:01:38 +0000 UTC

如何将两个列表中的键和值添加到现成的字典中?

  • 772

对于第一个文件,我的字典显示如下:

[n1]
[x1,y1]
{n1:[x1,y1]}

对于第二个文件,我生成了必要的列表:

[name1,name2,name3]
[datax1,datay1,datalac1,datax2,datay2,datalac2,datax3,datay3,datalac3]

如何以这种形式将数据添加到字典中:

{n1:[x1,y1], name1:[datax1,datay1,datalac1], name2:[datax2,datay2,datalac2], name3:[datax3,datay3,datalac3]}

这是整个代码:

import re
#1 перечислить список команд, которые может выполнить программа:
repeat="y"
listcmd=['Заполненние новых БС Nokia (1)', 'Заполненние довесов БС Nokia (2)', 'Заполненние довесов БС Ericsson (3)']
listname=[]
listxy=[]
listallname=[]
listall=[]
#7 Создать словарь и собрать данные: key - ИМЯ БС, value - Координаты, TAC, BSC:
datasites = dict()
#2 Создать пустой файл, который будет очищать при первом запуске и дублировать в дальнейшем информацию из консоли программы:
with open("output.txt", "w") as outfile:
    outfile.write("") 
while repeat == "y":
    print("Выполните действия, которые необходимо выполнить в CES:")
    print(listcmd)
    choicecmd = input()
    #print(choicecmd)
    if choicecmd == '1':
        print("Добавьте файлы формата kml в папке где находится программа для дальнейшей обработки данных.")
        #3 Вывести всю информацию одной БС из файла kml:
        with open("Site_IR000478_1.kml","r", encoding="utf8") as rdbfile:
            file = rdbfile.read()
        #print(file)
        #4 В двух файлах название БС, координаты, LAC и BSC отображаются в одном атрибуте Placemark. Нужно вывести всю информацию внутри атрибута Placemark:
        Placemark = re.findall(r'<Placemark>(.*?)</Placemark>', file, re.DOTALL)
        for i in Placemark:
            #print(i)
            #5 Написать код, который выводит Имя БС в каждом фрагменте Placemark, выводит его в нужном формате и добавить в пустой список:
            listbs = re.findall(r'<name>(.*?)</name>', i, re.DOTALL)
            #print(listbs)
            for bs in listbs:
                if '/' in bs:
                    bs = bs.split('/')[0]
                    i1 = 2
                    i2 = 3
                    bs = bs[:i1] + bs[i2+1:]
                    listname.append(bs)
                    #print(bs)
                    with open("output.txt", "a") as outfile:
                        outfile.write(bs + "\n")
                else:
                    #print("Имя базой станции другого формата!")
                    with open("output.txt", "a") as outfile:
                        outfile.write("Имя базой станции другого формата!\n")
            #6 Написать код, который выводит координаты в каждом фрагменте Placemark и выводит его в нужном формате и добавить в пустой список:
            listcoords = re.findall(r'<coordinates>(.*?)</coordinates>', i, re.DOTALL)
            #print(listcoords)
            for coords in listcoords:
                #print(coords)
                longitude = coords.split(',')[0]
                latitude = coords.split(',')[1]
                #print(longitude + " " + latitude + "\n")
                with open("output.txt", "a") as outfile:
                    outfile.write(longitude + " " + latitude + "\n")
                listxy.append(longitude)
                listxy.append(latitude)
        #print(listname)
        #print(listxy)
        #7
        #datasites["test1"]="test2" 
        datasites[listname[0]]=listxy
        print(datasites)
        #8 Собрать данные для второго файла, в котором есть Bsc и Lac:
        with open("IR.kml","r", encoding="utf8") as rdbfile:
            file = rdbfile.read()
        #print(file)
        Placemark = re.findall(r'<Placemark>(.*?)</Placemark>', file, re.DOTALL)
        for i in Placemark:
            #print(i)
            #if '<longitude>' and 'LAC' in i:
            if ('<longitude>' in i) and ('LAC' in i) and ('BSC: ' in i):
                listbs = re.findall(r'<name>(.*?)</name>', i, re.DOTALL)
                #print(listbs)
                for bs in listbs:
                    if (len(bs)==6) == True:
                        #print(bs)
                        listallname.append(bs)
                        with open("output.txt", "a") as outfile:
                            outfile.write(bs + "\n")                           
                    else:
                        #print("Имя базой станции другого формата!")
                        with open("output.txt", "a") as outfile:
                            outfile.write("Имя базой станции другого формата!\n")
                listcoords = re.findall(r'<longitude>(.*?)</latitude>', i, re.DOTALL)
                #print(listcoords)
                for coords in listcoords:
                    #print(coords)
                    coordinates = coords.split('</longitude>\n   <latitude>')
                    #print(coordinates)
                    longitude = coordinates[0]
                    latitude = coordinates[1]
                    #print(longitude + " " + latitude + "\n")
                    with open("output.txt", "a") as outfile:
                        outfile.write(longitude + " " + latitude + "\n")
                    listall.append(longitude)
                    listall.append(latitude)
                listbsctac = re.findall(r'<description>BSC: (.*?)</description>', i, re.DOTALL)
                #print(listbsctac)
                for data in listbsctac:
                    #print(data)
                    datas = data.split(' LAC: ')
                    #print(datas)
                    bsc = datas[0]
                    lac = datas[1]
                    #print(bsc + " " + lac + "\n")
                    with open("output.txt", "a") as outfile:
                        outfile.write(bsc + " " + lac + "\n")
                    listall.append(bsc)
                    listall.append(lac)
                #9 Добавить в словарь данные загруженные из второго файла:
                for o in listallname:
                    for p in listall:
                        datasites[o]=p
            else:
                #print("Координаты отсутсвуют!")
                #with open("output.txt", "a") as outfile:
                #   outfile.write("Координаты отсутсвуют!\n")
                break               
        #print(listallname)
        #print(listall)
        print(datasites)
    elif choicecmd == '2':
        print("Ты выбрал Заполненние довесов БС Nokia")
        with open("output.txt", "a") as outfile:
            outfile.write("Ты выбрал Заполненние довесов БС Nokia"+"\n")
    elif choicecmd == '3':
        print("Ты выбрал Заполненние довесов БС Ericsson")
        with open("output.txt", "a") as outfile:
            outfile.write("Ты выбрал Заполненние довесов БС Ericsson"+"\n")
    repeat = input("Do you want to continue? (y/n): ")
    if repeat == "n":
        break

在第9点中我尝试实现这一点。但它不输出需要的内容。将来,我需要将密钥中的数据与后续密钥进行比较。即,将 n1 坐标 x1,y1 与 name1 - datax1,datay1 进行比较。

python
  • 1 1 个回答
  • 29 Views

1 个回答

  • Voted
  1. Best Answer
    Иван Воронов
    2024-11-16T09:50:00Z2024-11-16T09:50:00Z

    我不想深入研究代码,但在此任务中您可以使用以下内容:

    这是我使用的输入(我必须将变量写为字符串,因为我没有任何变量):

    d1 = {"n1":["x1","y1"]}
    l1 = ["name1","name2","name3"]
    l2 = ["datax1","datay1","datalac1","datax2","datay2","datalac2","datax3","datay3","datalac3"]
    

    这是用于转换的代码:

    for i in range(len(l1)):
        d1[l1[i]] = [l2[y] for y in range(3*i,3*i + 3)]
    print(d1)
    #{'n1': ['x1', 'y1'], 'name1': ['datax1', 'datay1', 'datalac1'], 'name2': ['datax2', 'datay2', 'datalac2'], 'name3': ['datax3', 'datay3', 'datalac3']}
    

    聚苯乙烯

    如果列表是固定的并且只有变量的值发生变化,那么它是合适的。在名称数量不固定,但已知每个名称在列表中具有相同数量的元素(按此处排序)的情况下,可以使用更通用的代码:

    k = (len(l2)//len(l1))
    for i in range(len(l1)):
        d1[l1[i]] = [l2[y] for y in range(k*i,k*i+k)]
    print(d1)
    
    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5