Python删除不会在单独的字典中出现的字典键

时间:2017-06-01 19:40:35

标签: python dictionary

我有两个字典,我需要删除字典1中不会出现在字典2中的键。这是我的尝试:

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


    Dim sb As New System.Text.StringBuilder

    sb.AppendLine("@echo off")
    sb.AppendLine("")
    sb.AppendLine(":: BatchGotAdmin")
    sb.AppendLine(":-------------------------------------")
    sb.AppendLine("REM  --> Check for permissions")
    sb.AppendLine(">nul 2>&1 ""%SYSTEMROOT%\system32\cacls.exe"" ""%SYSTEMROOT%\system32\config\system""")
    sb.AppendLine("")
    sb.AppendLine("REM --> If error flag set, we do not have admin.")
    sb.AppendLine("if '%errorlevel%' NEQ '0' (")
    sb.AppendLine("   echo Requesting administrative privileges...")
    sb.AppendLine("    goto UACPrompt")
    sb.AppendLine(") else ( goto gotAdmin )")
    sb.AppendLine(":UACPrompt")
    sb.AppendLine("    echo Set UAC = CreateObject^(""Shell.Application""^) > ""%temp%\getadmin.vbs""")
    sb.AppendLine("    set params = %*:" = """")
    sb.AppendLine("    echo UAC.ShellExecute ""cmd.exe"", ""/c %~s0 %params%"", """", ""runas"", 1 >> ""%temp%\getadmin.vbs""")
    sb.AppendLine("    ""%temp%\getadmin.vbs""")
    sb.AppendLine("    del ""%temp%\getadmin.vbs""")
    sb.AppendLine("    exit /B")
    sb.AppendLine("")
    sb.AppendLine(":gotAdmin")
    sb.AppendLine("    pushd ""%CD%""")
    sb.AppendLine("    CD /D ""%~dp0""")
    sb.AppendLine(":--------------------------------------")
    sb.AppendLine("pause")

    IO.File.WriteAllText(Environ("SystemDrive") + "\fileName.bat", sb.ToString())

    Process.Start(Environ("SystemDrive") + "\fileName.bat")

End Sub
End Class

打印:

d1 = {'id1':1,
      'id2':1,
      'id3':1,
      'id4':1}

d2 = {'id1':0,
      'id2':0,
      'id3':0,
      'idnew':0}

for k in (d1.keys()-d2.keys()):
    del d1[k]

print (d1)

我的问题是:这是最快/最有效的内存方式吗?或者它构造的集合将占用比执行此类行为所需的更多内存

我的第二次尝试:

{'id1': 1, 'id2': 1, 'id3': 1}

3 个答案:

答案 0 :(得分:1)

过滤器和字典理解可能是一个很好的方法来完成这样的任务,虽然这个问题很容易解决。

 filtered_d = {k:d1[k] for k in filter(lambda k: k in d2, d1)}

答案 1 :(得分:0)

当词典很大时,词典理解可以有性能。您只需使用for循环遍历列表即可删除它们:

for key in set(d1) -set(d2):
    del d1[key]

或者如果您知道您的词汇量很小,则可以使用词典理解。

d1 = {k: v for k, v in d1.items() if k in d2}

答案 2 :(得分:0)

您的解决方案很好,因为:最快/最省内存的问题来自于值的类型和大小。 这可以通过python调试器来查看和设置。